创建Pandas透视表时如何保留所有列并维持原有聚合逻辑
解决方法:用pandas pivot_table保留所有列并统一聚合
这问题我碰到过!你现在只指定了values='Amount',所以透视表只生成这一列的聚合结果。要保留所有原有列,只需要把values参数设为原数据集中除了用作行索引的列之外的所有列就行,具体操作如下:
步骤1:明确索引列和值列
首先把你用作行索引的列单独提取出来,然后筛选出所有需要聚合的非索引列:
# 定义用作行索引的列(和你原来的参数一致) index_cols = ('Company Code', 'Company Code Text', 'Partner Company Code', 'BKA Item', 'Subitem', 'BKA SubItem Text') # 筛选出原数据中所有非索引的列,作为要聚合的值列 value_cols = [col for col in df.columns if col not in index_cols]
步骤2:生成包含所有列的透视表
将values参数设置为上面的value_cols列表,pivot_table会对每一列应用相同的聚合方式(默认是均值mean,如果你的需求是求和、计数等,可以手动指定aggfunc参数):
import pandas as pd # 默认聚合方式(均值) pivot1 = pd.pivot_table(df, index=index_cols, values=value_cols) # 如果需要求和,修改aggfunc参数 # pivot1 = pd.pivot_table(df, index=index_cols, values=value_cols, aggfunc='sum') # 查看结果 pivot1
补充说明
- 如果原数据集中包含非数值型列(比如字符串),默认的
mean聚合方式会报错,这时你可以调整aggfunc为适合的函数(比如count用来统计非空值数量),或者提前过滤掉不需要聚合的非数值列。 - 如果需要对不同列使用不同的聚合方式,可以把
aggfunc设为字典(比如aggfunc={'Amount': 'sum', 'OtherCol': 'mean'}),但根据你的需求,统一聚合方式的话用上面的方法就足够了。
内容的提问来源于stack exchange,提问作者Roberto Mulé
相关产品推荐
相关产品推荐

