Pandas如何按公共键匹配实现跨DataFrame列值高效累加
Pandas性能优化实现方案
双层循环属于Python层面的迭代操作,会产生极高的性能开销,改用Pandas原生矢量化运算即可实现百倍级以上的性能提升,具体实现有两种常用方案:
方案1:合并累加(逻辑直观易调试)
- 第一步对源表按公共键分组,统计每个
Codes interne对应的Quantite requise总和
sum_recette = RecetteDF.groupby('Codes interne', as_index=False)['Quantite requise'].sum()
- 第二步将统计结果与目标表左连接,空值补0后完成累加
# 左连接保证目标表原有数据不丢失 InventaireDF = InventaireDF.merge(sum_recette, on='Codes interne', how='left') # 没有匹配到的键补0后累加 InventaireDF['Quantite Reserver'] = InventaireDF['Quantite Reserver'] + InventaireDF['Quantite requise'].fillna(0) # 清理多余列 InventaireDF = InventaireDF.drop(columns=['Quantite requise'])
方案2:映射累加(内存占用更低,适合超大表)
直接将分组求和结果转为字典映射,原地更新目标表,不需要生成中间合并表:
# 生成键对应总需求量的映射字典 req_dict = RecetteDF.groupby('Codes interne')['Quantite requise'].sum().to_dict() # 映射后直接累加,无匹配值补0 InventaireDF['Quantite Reserver'] += InventaireDF['Codes interne'].map(req_dict).fillna(0)
注意事项
如果匹配失效,优先检查两个表的Codes interne列数据类型是否一致,可通过astype()方法统一类型后再执行操作。
内容的提问来源于stack exchange,提问作者Maxime Daigle
相关产品推荐
相关产品推荐

