Python Pandas处理Excel重复邮政编码:求和生成新列表求助
解决Excel重复邮政编码对应数量求和的问题
嘿,你已经迈出了关键的第一步——筛选出重复的邮政编码,做得不错!不过其实用Pandas内置的分组聚合功能,就能更简洁高效地完成「找出重复Zip+对应Quantity求和」的需求,不用借助Counter和filter绕弯路,我给你一步步拆解:
核心思路
Pandas的groupby方法天生适合这种「按某列分组+对另一列聚合计算」的场景,我们可以直接:
- 按
Zip列分组,统计每个Zip对应的Quantity总和 - 筛选出那些出现次数超过1次的Zip,保留它们的求和结果
完整优化代码
import pandas as pd # 1. 读取Excel数据(和你原来的步骤一致) df = pd.read_excel(r'L:\FixedIncomeReport.xlsx') # 2. 先按Zip分组,计算每个Zip的Quantity总和,同时统计每个Zip出现的次数 zip_summary = df.groupby('Zip').agg( Total_Quantity=('Quantity', 'sum'), Occurrence_Count=('Quantity', 'count') ).reset_index() # 3. 筛选出重复的Zip(出现次数>1),得到最终结果 duplicate_zips_with_sum = zip_summary[zip_summary['Occurrence_Count'] > 1] # 4. 可以把结果转成你需要的列表格式,比如每个元素是(Zip, 求和值)的元组 result_list = list(zip(duplicate_zips_with_sum['Zip'], duplicate_zips_with_sum['Total_Quantity'])) # 打印看看结果 print("重复邮政编码及对应数量求和:") for zip_code, total in result_list: print(f"Zip {zip_code}: 总数量 = {total}")
代码解释
groupby('Zip'):把数据按邮政编码分组,相同Zip的行会被归为一组agg(...):对每组进行聚合操作,这里同时计算了两个值:Total_Quantity是该Zip对应的所有Quantity之和,Occurrence_Count是该Zip出现的次数reset_index():把分组后的索引(Zip)变回普通列,方便后续筛选- 最后通过
Occurrence_Count > 1筛选出重复的Zip,再转成你需要的列表格式就行
简化版写法(适合快速输出)
如果只是想快速得到结果,甚至可以简化成一行:
# 一行代码直接得到重复Zip的求和结果 duplicate_sum = df.groupby('Zip')['Quantity'].sum()[df.groupby('Zip')['Zip'].count() > 1]
内容的提问来源于stack exchange,提问作者TimmyBoi
相关产品推荐
相关产品推荐

