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

在Pandas中实现多键跨两个DataFrame的SUMIF等效功能

Pandas实现类似Excel SUMIF的跨DataFrame高效求和方法

针对你的需求,最优方案是通过数据重塑+分组求和+匹配合并的流程实现,相比拆分多个DataFrame再合并的方式,代码更简洁、效率更高,尤其适合处理大量重复键的场景。

核心步骤

  1. 将原DataFrame(df)中的多组KEY_*与KEY_COUNT_*配对,重塑为统一的长格式
  2. 按KEY分组求和,得到每个键的总计数
  3. 与目标DataFrame(df1)合并,保留所有键,未匹配到的计数填0

完整代码实现

import pandas as pd

# 原始数据
df = pd.DataFrame({ 
    'KEY_1': ['MF1020','MF1020','MF1540','MF5520','MF1525','MF6010'],
    'KEY_2': ['MF0520','MF2020','MF2030','MF4520','MF1050','MF1020'],
    'KEY_3': ['MF1020','MF2520','MF1020','MF2520','MF1020','MF1060'],
    'KEY_COUNT1': [1,0.4,0,0,0.45,0.01],
    'KEY_COUNT2': [0,0.3,0.9,0,0.05,0.01],
    'KEY_COUNT3': [0,0.3,0.1,1,0.5,0.98],
})

df1 = pd.DataFrame({
    'KEY': ['MF1020', 'MF0565', 'MF1540', 'MF5520', 'MF1525', 'MF6515', 'MF6010', 'MF0520','MF2020', 'MF2030', 'MF4520', 'MF1050', 'MF2520', 'MF1060'],
    'KEY_COUNT': [0,0,0,0,0,0,0,0,0,0,0,0,0,0]
})

# 1. 定义KEY与COUNT的列映射关系
key_count_pairs = [
    ('KEY_1', 'KEY_COUNT1'),
    ('KEY_2', 'KEY_COUNT2'),
    ('KEY_3', 'KEY_COUNT3')
]

# 2. 重塑为长格式:合并所有KEY-COUNT组
melted_data = pd.concat([
    df[[key_col, count_col]].rename(columns={key_col: 'KEY', count_col: 'KEY_COUNT'})
    for key_col, count_col in key_count_pairs
], ignore_index=True)

# 3. 按KEY分组求和
summed_keys = melted_data.groupby('KEY')['KEY_COUNT'].sum().reset_index()

# 4. 与df1合并,保留所有KEY,缺失值填0
df_final = df1.set_index('KEY') \
              .join(summed_keys.set_index('KEY'), how='left') \
              .fillna(0) \
              .reset_index() \
              .rename(columns={'KEY': 'KEY_1'})

# 输出结果
print(df_final)

结果验证

运行后得到的df_final与你预期的结果完全一致:

KEY_1  KEY_COUNT
0    MF1020       2.01
1    MF0565       0.00
2    MF1540       0.00
3    MF5520       0.00
4    MF1525       0.45
5    MF6515       0.00
6    MF6010       0.01
7    MF0520       0.00
8    MF2020       0.30
9    MF2030       0.90
10   MF4520       0.00
11   MF1050       0.05
12   MF2520       1.30
13   MF1060       0.98

方案优势

  • 可扩展性强:新增KEY_*与KEY_COUNT_*组时,只需在key_count_pairs中添加对应关系即可
  • 效率更高:避免多次拆分、合并DataFrame的冗余操作,适合处理大规模数据集
  • 逻辑清晰:通过一次重塑完成多组数据的统一处理,代码可读性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:17:10