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

我有一个如下所示的数据框:


Customer    ProductCategory    TimeFrame    Sales    Returns

Greg        Soap               CY           5        1

Phil        Towels             PY           2        3

Greg        Soap               PY           7        

Greg        Towels             CY           3        

我想旋转这个 DataFrame 以便得到类似这样的东西:


Customer    ProductCategory    Measure    CY    PY

Greg        Soap               Sales      5     7

Greg        Soap               Returns    1      

Greg        Towels             Sales      3     

Greg        Towels             Returns           

Phil        Towels             Sales            2

Phil        Towels             Returns          3

上面的缺失值应该为空。我不想填满它们。


我尝试过一些不同的方法。我得到的最接近的是与,和pivot_table一起使用:meltgroupbystack


pd.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    PY

0           Greg        Soap               Returns    1.0   0.0

1           Greg        Soap               Sales      5.0   7.0

2           Greg        Towels             Returns    0.0   NaN

3           Greg        Towels             Sales      3.0   NaN

4           Phil        Towels             Returns    NaN   3.0

5           Phil        Towels             Sales      NaN   2.0

这里的问题是一些空数值已被零填充。另外,即使我应用了reset_index,索引现在也被命名为“TimeFrame”?


最后,我很好奇是否有一种我所缺少的更有效的方法来做到这一点。既然pivot_table我已经完成了大部分工作,是否有我缺少的参数或类似的东西?


largeQ
浏览 69回答 1
1回答

暮色呼如

你只需要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   PY0             Greg            Soap  Returns  1.0  NaN1             Greg            Soap    Sales  5.0  7.02             Greg          Towels    Sales  3.0  NaN3             Phil          Towels  Returns  NaN  3.04             Phil          Towels    Sales  NaN  2.0要删除索引/列的名称,请将上面的链接与rename_axis(index=None,columns=None)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python