如何使用索引中的行来制作数据透视表

时间:2019-06-19 09:06:31

标签: python pandas pivot-table

背景与研究

我目前正在尝试使用pandas库中的pivot_table,并且正在寻找一种以某种特定方式制作表格的方法。 想法是根据索引在行中呈现值,在列中呈现另一个变量。

在查看了与pandas.pivot_table中的分组有关的several answers on the site之后,到目前为止,我还没有找到能够解决该问题的方法。

代码和示例

由于显示要比讲述要好,所以我为您提供了一个简短的代码段,以说明我已经做到了。

import pandas as pd

df = pd.DataFrame(
  {
    "Year": [2018, 2018, 2018, 2018, 2018, 2018, 2018, 2019, 2019, 2019, 2019, 2019, 2019, 2019], 
    "Month": [4, 5, 6 , 7, 8, 9, 10, 4, 5, 6 , 7, 8, 9, 10],
    "Apples": [3, 5, 1, 2, 5, 6, 6, 8, 9, 9, 1, 8, 6, 4],
    "Temperature": [8.6, 13.7, 16.5, 18.5, 18.0, 13.5, 8.7, 9.2 , 14.2, 15.5, 20.1, 18.6, 12.8, 8.7]
  } 
)

pivoted_data = pd.pivot_table(df, index=['Month'], columns=['Year'], values=['Apples', 'Temperature']).transpose()

数据透视表的结果:

Month              4     5     6     7     8     9    10
            Year                                        
Apples      2018  3.0   5.0   1.0   2.0   5.0   6.0  6.0
            2019  8.0   9.0   9.0   1.0   8.0   6.0  4.0
Temperature 2018  8.6  13.7  16.5  18.5  18.0  13.5  8.7
            2019  9.2  14.2  15.5  20.1  18.6  12.8  8.7

我最好的尝试是使用.transpose()方法处理数据帧并如上所述渲染表格,但这并不能完全满足我的需求。

预期结果

我正在寻找如下数据:

     Month          4     5     6     7     8     9    10
Year                                                     
2018 Temperature   8.6  13.7  16.5  18.5  18.0  13.5  8.7
     Apples        3.0   5.0   1.0   2.0   5.0   6.0  6.0
2019 Temperature   8.0   9.0   9.0   1.0   8.0   6.0  4.0
     Apples        9.2  14.2  15.5  20.1  18.6  12.8  8.7

差异很小但很重要,因为数据是按年份显示的(而不是苹果和温度的值)。

我无法成功地解决当前问题。 会有人知道如何以这种方式呈现这个小型数据集吗?

1 个答案:

答案 0 :(得分:4)

DataFrame.swaplevelDataFrame.sort_index一起使用,另一种转置解决方案是DataFrame.T(较少键入):

pivoted_data = (pd.pivot_table(df, 
                               index='Month',
                               columns='Year', 
                               values=['Apples', 'Temperature'])
                  .T
                  .swaplevel(1, 0)
                  .sort_index())

print (pivoted_data)
Month              4     5     6     7     8     9    10
Year                                                    
2018 Apples       3.0   5.0   1.0   2.0   5.0   6.0  6.0
     Temperature  8.6  13.7  16.5  18.5  18.0  13.5  8.7
2019 Apples       8.0   9.0   9.0   1.0   8.0   6.0  4.0
     Temperature  9.2  14.2  15.5  20.1  18.6  12.8  8.7