Pivot一个多列的pandas数据框架。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pivot一个多列的pandas数据框架。相关的知识,希望对你有一定的参考价值。

我有一个示例数据框架,如下所示

df1 = pd.DataFrame({'Gender':['Male','Male','Male','Male','Female','Female','Female','Female','Male','Male','Male','Male','Female','Female','Female','Female'],
                'Year' :[2008,2008,2009,2009,2008,2008,2009,2009,2008,2008,2009,2009,2008,2008,2009,2009],
           'rate':[2.3,3.2,4.5,6.7,5.6,3.2,3.5,2.6,2.3,3.2,4.5,6.7,5.6,3.2,3.5,2.6],
           'Heading':['TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123',
                     'TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456'],
           'target':[31.2,33.4,33.4,35.2,35.2,36.4,36.4,37.2,31.2,33.4,33.4,35.2,35.2,36.4,36.4,37.2],
            'day_type':['wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend']})

我想把它们进行转置,得到如下图所示的输出,但我的代码却出现了如下图所示的错误。

df1.pivot(index='Year', columns='Heading', values='rate')

在SO贴的帮助下,我写了这个,但是对于3列,我不知道如何使其工作?

df1 = df1.pivot_table(index=['Year','Gender','day_type'],columns='Heading',values='rate').unstack()
df1.columns = ['_'.join(i) for i in df1.columns.tolist()]

我希望我的输出是如下图所示,其中每一年作为一行,该年的所有对应条目作为列。

请注意,我没有填写数值,因为表列结构更重要。

enter image description here

答案

尝试用 map,你还需要 unstack 两种 level

df1 = df1.pivot_table(index=['Year','Gender','day_type'],columns='Heading',values='rate').unstack([1,2])
df1.columns=df1.columns.map('_'.join)
df1
      TNMAB123_Female_wk  ...  TNMAB456_Male_wkend
Year                      ...                     
2008                 5.6  ...                  3.2
2009                 3.5  ...                  6.7
[2 rows x 8 columns]

以上是关于Pivot一个多列的pandas数据框架。的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas——在多列上融化、旋转、转置

SQL Pivot 多列 [关闭]

PIVOT/UNPIVOT 多行多列

PIVOT 没有聚合。在多列上使用 Max

在日期上应用行逻辑,同时只提取数据框架的多列。

MS SQL Pivot 来自多列的长数据