pandas如何筛选groupby sum结果获取指定Code的汇总值
解决方案
你现有代码的问题:
- 重复三次执行全量
groupby求和,属于冗余计算 - 未从分组结果中提取指定Code对应的汇总值,且后两个
print语句漏了字符串和变量间的逗号,会触发语法错误
方法1:一次分组后按索引取值(推荐,计算效率最高)
groupby求和后的结果默认以分组列Code作为索引,是一个pandas Series,只需要计算一次全部分组的和,就可以直接通过索引标签提取对应编码的汇总值:
# 仅执行一次分组求和 sum_by_code = df.groupby('Code')['Total'].sum() # 提取指定编码的汇总值 subheading_one = sum_by_code['1.1'] subheading_two = sum_by_code['1.2'] subheading_three = sum_by_code['1.3'] # 打印输出,补全缺失的逗号 print('Cost heading 1.1 £: ', subheading_one) print('Cost heading 1.2 £: ', subheading_two) print('Cost heading 1.3 £: ', subheading_three)
运行后subheading_one就会返回你预期的编码1.1对应的汇总值300。
注意:如果你的
Code列是浮点/整数类型而非字符串类型,取值时去掉引号即可,例如sum_by_code[1.1]。
方法2:先过滤再求和(适合仅需少量编码值的场景)
如果不需要所有编码的汇总结果,可以直接先筛选出对应编码的行再对Total列求和,不需要调用groupby,写法更直观:
subheading_one = df[df['Code'] == '1.1']['Total'].sum() subheading_two = df[df['Code'] == '1.2']['Total'].sum() subheading_three = df[df['Code'] == '1.3']['Total'].sum()
参考数据示例:
内容的提问来源于stack exchange,提问作者planckepoch86
相关产品推荐
相关产品推荐

