我有一个如下所示的数据框:Customer ProductCategory TimeFrame Sales ReturnsGreg Soap CY 5 1Phil Towels PY 2 3Greg Soap PY 7 Greg Towels CY 3 我想旋转这个 DataFrame 以便得到类似这样的东西:Customer ProductCategory Measure CY PYGreg Soap Sales 5 7Greg Soap Returns 1 Greg Towels Sales 3 Greg Towels Returns Phil Towels Sales 2Phil Towels Returns 3上面的缺失值应该为空。我不想填满它们。我尝试过一些不同的方法。我得到的最接近的是与,和pivot_table一起使用:meltgroupbystackpd.pivot_table(df, values=['Sales', 'Returns'], index=['Customer', 'ProductCategory'], columns=['TimeFrame'], aggfunc=np.sum) \.reset_index() \.melt(id_vars=['Customer', 'ProductCategory']) \.rename(columns={None: 'Measure'}) \.groupby(by=['Customer', 'ProductCategory', 'Measure', 'TimeFrame'])['value'] \.aggregate('first') \.unstack() \.reset_index()结果如下:TimeFrame Customer ProductCategory Measure CY PY0 Greg Soap Returns 1.0 0.01 Greg Soap Sales 5.0 7.02 Greg Towels Returns 0.0 NaN3 Greg Towels Sales 3.0 NaN4 Phil Towels Returns NaN 3.05 Phil Towels Sales NaN 2.0这里的问题是一些空数值已被零填充。另外,即使我应用了reset_index,索引现在也被命名为“TimeFrame”?最后,我很好奇是否有一种我所缺少的更有效的方法来做到这一点。既然pivot_table我已经完成了大部分工作,是否有我缺少的参数或类似的东西?
1 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
你只需要melt并且pivot_table:
(df.melt(['Customer','ProductCategory','TimeFrame'], var_name='Measure')
.pivot_table(index=['Customer','ProductCategory','Measure'],
columns='TimeFrame',values='value')
.reset_index()
)
输出:
TimeFrame Customer ProductCategory Measure CY PY
0 Greg Soap Returns 1.0 NaN
1 Greg Soap Sales 5.0 7.0
2 Greg Towels Sales 3.0 NaN
3 Phil Towels Returns NaN 3.0
4 Phil Towels Sales NaN 2.0
要删除索引/列的名称,请将上面的链接与rename_axis(index=None,columns=None)
添加回答
举报
0/150
提交
取消