You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame字典按Code分组求和后结果未变更的原因分析

问题:分组求和代码未生效,输出与输入完全一致

场景与需求

拥有一个DataFrame字典sales_dict,其中每个DataFrame对应2017-2022中的一个年度数据:

  • 每个DataFrame包含Code列和以对应年份命名的数值列(例如2017年的DataFrame有2017列)
  • 所有DataFrame的Code列表一致,仅年份数值列存在差异
    目标:按Code分组,对对应年份的数值列执行求和(类似Excel的SUMIF功能)

输入数据样例(以2017年DataFrame为例)

Code    2017
33200   6957
33200   151906
33200   142025
33200   729494
33200   68842
32420   153499
32320   1756310
32320   33949
32310   81860
32310   56127
32200   165520

预期输出(2017年分组求和后结果)

Code    2017
33200   1099224
32420   153499
32320   1790259
32310   137987
32200   165520

运行的代码

year_list_1 = [2017,2018,2019,2020,2021,2022]
sales_dict_2={}
for year_var in year_list_1:
    sales_dict_2[year_var] = sales_dict[year_var].groupby('Code',as_index=False)[[year_var]].sum() # where sales_dict is the dictionary mentioned above

原因分析与解决办法

核心原因

代码中year_var是整数类型(如2017),但DataFrame的年份列名是字符串类型的"2017"。当用整数2017作为索引选取列时,Pandas无法匹配到对应列,导致groupby的求和操作实际上没有作用在目标数值列上,最终返回的DataFrame与原数据完全一致。

验证方法

可以在循环中添加代码验证列名类型:

print(f"2017年DataFrame的列名:{sales_dict[2017].columns.tolist()}")

输出会显示列名为['Code', '2017'](字符串形式的年份),而非整数2017。

修正方案

将整数类型的year_var转换为字符串后,再用于选取列:

year_list_1 = [2017,2018,2019,2020,2021,2022]
sales_dict_2={}
for year_var in year_list_1:
    year_col = str(year_var)  # 转换为字符串格式的列名
    sales_dict_2[year_var] = sales_dict[year_var].groupby('Code', as_index=False)[[year_col]].sum()

内容的提问来源于stack exchange,提问作者DGMS89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 03:46:24