4 回答

TA貢獻1825條經驗 獲得超6個贊
pivot那么我們來嘗試一下stack:
df.pivot('day','pos','value').stack(dropna=False).reset_index(name='value')
輸出:
day pos value
0 1 1 1.0
1 1 14 2.0
2 1 18 3.0
3 2 1 1.0
4 2 14 2.0
5 2 18 NaN
6 3 1 NaN
7 3 14 NaN
8 3 18 3.0
選項 2:與 MultiIndex 合并:
df.merge(pd.DataFrame(index=pd.MultiIndex.from_product([df['day'].unique(), df['pos'].unique()])),
left_on=['day','pos'], right_index=True, how='outer')
輸出:
day pos value
0 1 1 1.0
1 1 14 2.0
2 1 18 3.0
3 2 1 1.0
4 2 14 2.0
5 3 18 3.0
5 2 18 NaN
5 3 1 NaN
5 3 14 NaN

TA貢獻1830條經驗 獲得超3個贊
product我會避免使用所有可能值的手冊。
reindex相反,人們可以獲得每天的唯一值:
u = df.pos.unique()
df.groupby('day').apply(lambda s: s.set_index('pos').reindex(u))['value']\
.reset_index()
day pos value
0 1 1 1.0
1 1 14 2.0
2 1 18 3.0
3 2 1 1.0
4 2 14 2.0
5 2 18 NaN
6 3 1 NaN
7 3 14 NaN
8 3 18 3.0

TA貢獻1816條經驗 獲得超6個贊
您可以reindex:
s = pd.MultiIndex.from_product([df["day"].unique(),df["pos"].unique()], names=["day","pos"])
print (df.set_index(["day","pos"]).reindex(s).reset_index())
day pos value
0 1 1 1.0
1 1 14 2.0
2 1 18 3.0
3 2 1 1.0
4 2 14 2.0
5 2 18 NaN
6 3 1 NaN
7 3 14 NaN
8 3 18 3.0

TA貢獻1851條經驗 獲得超5個贊
您可以使用pyjanitor的完整函數來公開缺失的值:
您可以reindex:
s = pd.MultiIndex.from_product([df["day"].unique(),df["pos"].unique()], names=["day","pos"])
print (df.set_index(["day","pos"]).reindex(s).reset_index())
? ?day? pos? value
0? ? 1? ? 1? ? 1.0
1? ? 1? ?14? ? 2.0
2? ? 1? ?18? ? 3.0
3? ? 2? ? 1? ? 1.0
4? ? 2? ?14? ? 2.0
5? ? 2? ?18? ? NaN
6? ? 3? ? 1? ? NaN
7? ? 3? ?14? ? NaN
8? ? 3? ?18? ? 3.0
添加回答
舉報