我有如下数据框:
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]})
有人能指出我如何实现这一目标的正确方向吗?
最佳答案
因此,我们使用带有 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
关于python - Pandas:将数据帧填充到最大行长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55068265/