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

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

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

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 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号