python - Pandas:将数据帧填充到最大行长度

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

有人能指出我如何实现这一目标的正确方向吗?

最佳答案

因此,我们使用带有 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

关于python - Pandas:将数据帧填充到最大行长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55068265/

相关文章:

python - 将 numpy 数组的第二列转换为虚数

python - 根据分组列向包含特定列比例的 Pandas 数据框添加一列

python - .apply 在 Pandas 中如何工作?

python - 如何将 Pandas 数据框转换为具有混合数据类型和可能重复值的新格式

python - 如何使用 pandas 返回 boolean 值比较组中的项目?

Python 将变量输出拆分为多个变量

python - csv文件中的 'rb'是什么意思?

python - os.environ.get() 不返回 Windows 中的环境值?

python - 按函数分组后将值与先前值进行比较

pandas - 在pandas中使用groupby或aggregate的最佳方法