熊猫:将数据帧填充到最大行长

时间:2019-03-08 17:35:32

标签: python pandas pandas-groupby

我有如下数据框:

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]})

有人可以为我指出正确的方向吗?

1 个答案:

答案 0 :(得分:2)

因此,我们将ID设置为cumcount,然后使用stackunstack

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