2 回答

TA貢獻1853條經驗 獲得超6個贊
DataFrame.set_index
與DataFrame.unstack
,DataFrame.stack
和一起使用DataFrame.reset_index
:
df = df.set_index(["name", "date"]).unstack().stack(dropna=False).reset_index()
print (df)
name date x y
0 anne 1 2.0 5.0
1 anne 2 NaN NaN
2 anne 3 3.0 5.0
3 bob 1 1.0 2.0
4 bob 2 2.0 4.0
5 bob 3 NaN NaN
您的解決方案是可能的相同方式:
df = df.pivot_table(index = ["name", "date"], values = ['x','y'], fill_value=0).unstack().stack(dropna=False).reset_index()
print (df)
name date x y
0 anne 1 2.0 5.0
1 anne 2 NaN NaN
2 anne 3 3.0 5.0
3 bob 1 1.0 2.0
4 bob 2 2.0 4.0
5 bob 3 NaN NaN

TA貢獻1853條經驗 獲得超9個贊
另一種方法Multiindex.from_product
是reindex
:
idx = pd.MultiIndex.from_product((df['date'].unique(),
df['name'].unique()),names=['date','name'])
df.set_index(['date','name']).reindex(idx).sort_index(level=1).reset_index()
date name x y
0 1 anne 2.0 5.0
1 2 anne NaN NaN
2 3 anne 3.0 5.0
3 1 bob 1.0 2.0
4 2 bob 2.0 4.0
5 3 bob NaN NaN
添加回答
舉報