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
相关产品推荐
相关产品推荐

