首页 > 解决方案 > 如何使 pandas 中的数据透视表表现得像 Excel 中的数据透视表?

问题描述

我正在尝试转置数据,聚合方法无关紧要,但数据是按值而不是日期分组的

代码:

import pandas as pd
d = {'date': ['2/21/2020', '2/21/2020','2/22/2020','2/22/2020','2/23/2020','2/23/2020'], 
     'name': ['James','John', 'James','John','James','John'],
     'A':[1,2,3,4,5,6],
     'B':[7,8,9,10,11,12],
     'C':[13,14,15,16,17,18]}
df = pd.DataFrame(data=d)
df = pd.pivot_table (df, index ='name', columns='date', values=['A','B','C'])
df

我得到的输出:

熊猫数据框

我需要的

Excel 数据透视表

注意:在 Excel 中,数据透视表输入为(“日期”作为列/“名称”作为行/“A”、“B”和“C”作为值)

标签: pythonexcelpandasdataframepivot-table

解决方案


您需要使用swaplevel来切换 MultiIndex 列的顺序,以便日期在顶部,“A”、“B”、“C”在底部。然后,您还将对该索引进行排序。要将“A”替换为“A 的总和”,我使用该rename方法在列前加上“Sum of A”。

new_df = (df.pivot_table(index ='name', columns='date', values=['A','B','C'])
          .swaplevel(axis=1)
          .sort_index(axis=1)
          .rename(columns="Sum of {}".format, level=1)
)

print(new_df)
date  2/21/2020                   2/22/2020                   2/23/2020                  
       Sum of A Sum of B Sum of C  Sum of A Sum of B Sum of C  Sum of A Sum of B Sum of C
name                                                                                     
James         1        7       13         3        9       15         5       11       17
John          2        8       14         4       10       16         6       12       18

推荐阅读