为了账号安全,请及时绑定邮箱和手机立即绑定

执行透视时从列值获取列标题

执行透视时从列值获取列标题

largeQ 2023-09-12 10:31:04
我有一个如下所示的数据框: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)


查看完整回答
反对 回复 2023-09-12
  • 1 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信