Pandas无法按District列匹配字符串计算对应行总和的解决方法
Pandas按District列分组求和异常解决方案
问题根因
当前使用的分组代码同时传入了HS Code、District两个分组键,最终返回的是HS Code与District两两组合维度的汇总结果,并非单独按District维度聚合的总值,因此无法得到预期的各地区单独汇总数据。
之前运行的代码及对应输出参考:
g1 = df1.groupby(['HS Code','District'])['April, 21 To February, 22 Value(US $)'].sum()
实现方法
方法1:仅生成各District单独的总值
直接移除分组键中多余的HS Code字段,仅以District作为分组维度即可,运行前建议先做数据清洗避免统计偏差:
- 清洗District字段:去除字符串前后多余空格,避免同个地区因为隐藏空格被拆分为多个分组
- 清洗数值列:如果目标值列带
$符号、千分位逗号,先替换内容后转为数值类型,否则求和逻辑会出错
# 前置数据清洗 df1['District'] = df1['District'].str.strip() df1['April, 21 To February, 22 Value(US $)'] = ( df1['April, 21 To February, 22 Value(US $)'] .replace(r'[$,]', '', regex=True) .astype(float) ) # 按District分组求和,as_index=False返回标准DataFrame格式 district_sum = df1.groupby('District', as_index=False)['April, 21 To February, 22 Value(US $)'].sum() # 提取南安达曼、尼科巴两个指定地区的汇总值 target_res = district_sum[district_sum['District'].isin(['南安达曼', '尼科巴'])]
如果需要索引为地区名的Series格式结果,去掉代码里的as_index=False参数即可。
方法2:同时保留细粒度分组和District维度汇总
如果需要同时保留「HS Code+District」的细粒度汇总、以及各District单独的总值,可以用数据透视表的边距参数自动生成小计:
summary_table = df1.pivot_table( index=['HS Code', 'District'], values='April, 21 To February, 22 Value(US $)', aggfunc='sum', margins=True, margins_name='地区小计' )
运行后结果中每个District分类下会自动生成该地区所有HS Code对应的总值汇总行。
内容的提问来源于stack exchange,提问作者darklord321
相关产品推荐
相关产品推荐

