首页 > 解决方案 > 熊猫中的MultiIndex枢轴,从长到宽的问题

问题描述

我确信这是一个简单的从长到宽的问题,但是当我有多个列在使用时,我无法正确处理如何处理这个问题。

我的数据如下所示:

>>> df.head()
        s_name   geo    zip  date value
0        A002X   zip  00601  2010     1
1        A002Y   zip  00601  2010     2
2        A003X   zip  00601  2010     3
3        A003Y   zip  00601  2010     4
...
.        A002X   zip  00602  2010     8
.        A002Y   zip  00602  2010     9
.        A003X   zip  00602  2010    10
.        A003Y   zip  00602  2010    11

我希望它看起来像这样,即 s_name 列的内容成为新列,它们的值是 'value' 列,按 (geo,zip,date) 分组:

>>> df2.head()
         A002X A002Y A003X A003Y     geo    zip  date
0            1     2     3     4     zip  00601  2010
1            8     9    10    11     zip  00602  2010
2           19    20    21    22     zip  00603  2010
3           31    32    33    45     zip  00604  2010

我试过这样的一对

>>> df.pivot(columns='s_name', values=["geo","zip","date","value"])

>>> df.pivot(columns='s_name', values=["geo","zip","date","value"]).unstack().reset_index()

我觉得我真的很接近,但似乎没有什么匹配。例如,这会删除额外的非 s_name 值:

>>> df.pivot(columns='name', values=["value"]).head()

如何获得我正在寻找的格式?

标签: pandaspandas-groupby

解决方案


我将要做的pivot_table

s=df.pivot_table(index=['geo','zip','date'],columns='s_name',values='value',aggfunc='sum')
s
s_name        A002X  A002Y  A003X  A003Y
geo zip date                            
zip 601 2010      1      2      3      4
    602 2010      8      9     10     11
#s=s.reset_index()

推荐阅读