我有如下数据框:
df = pd.DataFrame({"id": [100, 200, 200, 300, 300, 300], "val1": [1.5, 2.5, 4.5, np.nan, 6.5, np.nan], "val2": [9.5, 7.5, 8.5, 3.5, np.nan, np.nan]})
我要实现的是将每个组零填充(假设数据帧按id
分组),以达到所有组的最大行数。上面的数据帧每id
的最大行数为3,因此结果数据帧应如下所示:
df_true = pd.DataFrame({"id": [100, 100, 100, 200, 200 ,200, 300, 300, 300], "val1": [1.5, 0, 0, 2.5, 4.5, 0, np.nan, 6.5, np.nan], "val2": [9.5, 0, 0, 7.5, 8.5, 0, 3.5, np.nan, np.nan]})
有人可以为我指出正确的方向吗?
答案 0 :(得分:2)
因此,我们将ID设置为cumcount
,然后使用stack
和unstack
df['new']=df.groupby('id').cumcount()
df_true=df.set_index(['id','new']).unstack(fill_value=0).stack(dropna=False).reset_index('id')
df_true
Out[908]:
id val1 val2
new
0 100 1.5 9.5
1 100 0.0 0.0
2 100 0.0 0.0
0 200 2.5 7.5
1 200 4.5 8.5
2 200 0.0 0.0
0 300 NaN 3.5
1 300 6.5 NaN
2 300 NaN NaN