多级索引pandas透视表按Type A对指定列求和的实现方法
解决方法
你的透视表列是4级多层索引,层级从上到下依次为聚合函数/值字段/Type/月份,可以用pd.IndexSlice便捷筛选多级索引列后求和,代码如下:
import pandas as pd # 定义多级索引筛选器 idx = pd.IndexSlice # 筛选sum聚合下、Sales值、Type A分类的所有月份列,按行求和后作为新列添加 # 新列的4个空占位符对应4级列索引的位置,实现和原有层级对齐 pivot_1[('Type A Total', '', '', '')] = pivot_1.loc[:, idx['sum', 'Sales', 'Type A', :]].sum(axis=1) # 若需要让新增列的列名和你预期的展示效果完全一致,可执行下面的代码调整列名层级 pivot_1.columns = pivot_1.columns.set_names(['', '', 'Type', 'Date_onlyMonth'])
运行后即可得到你预期的汇总效果:
sum len Type A Total Sales Sales Type Type A Type B Type A Type B Date_onlyMonth 2021-Sep 2021-Oct 2021-Nov 2021-Sep 2021-Oct 2021-Nov Customer Merchant Donale Fucci Merchant_B NaN 4000.0 NaN NaN 1.0 NaN 4000.0 Jo Watthanaram Merchant_C NaN NaN 5000.0 NaN NaN 1.0 NaN Susan Mock Merchant_A 2000.0 NaN NaN 1.0 NaN NaN 2000.0 Tom Ford Merchant_A 1000.0 8000.0 NaN 1.0 1.0 NaN 9000.0 Merchant_B NaN 3000.0 NaN NaN 1.0 NaN 3000.0
错误原因说明
之前的代码报错是因为没有匹配多级索引的取值规则:
- 直接传入底层索引(如
2021-Sep、Type A)取列时,没有指定上层索引的匹配条件,会触发KeyError - 用
[:, 'Type A Total']这种切片方式不符合DataFrame多级列索引的赋值语法,会触发类型错误
内容的提问来源于stack exchange,提问作者Klllmmm
相关产品推荐
相关产品推荐

