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

匹配DataFrame同名记录并累加Score值的实现方案

问题描述

我有以下两个DataFrame:

DF1

NameAgeScore
A2055
B2160
C2220
D2325
E2430

DF2(所有Name均存在于DF1中,DF1的Name字段唯一)

NameAgeScore
A2020
D2340
E2480

需要将DF2中每条记录的Score累加到DF1对应Name的Score上,最终得到如下结果:

目标结果

NameAgeScore
A2075
B2160
C2220
D2365
E24110
解决方案

方法1:合并后累加

通过merge将两个DataFrame按Name关联,再对Score列求和:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    'Name': ['A', 'B', 'C', 'D', 'E'],
    'Age': [20, 21, 22, 23, 24],
    'Score': [55, 60, 20, 25, 30]
})

df2 = pd.DataFrame({
    'Name': ['A', 'D', 'E'],
    'Age': [20, 23, 24],
    'Score': [20, 40, 80]
})

# 合并Score列,左连接保留DF1所有记录
merged = df1.merge(df2[['Name', 'Score']], on='Name', how='left', suffixes=('', '_df2'))
# 累加Score,未匹配到的记录加0
merged['Score'] = merged['Score'] + merged['Score_df2'].fillna(0)
# 提取目标列
result = merged[['Name', 'Age', 'Score']]
print(result)

方法2:字典映射累加

将DF2的Score转为字典,通过map快速匹配并累加:

import pandas as pd

df1 = pd.DataFrame({
    'Name': ['A', 'B', 'C', 'D', 'E'],
    'Age': [20, 21, 22, 23, 24],
    'Score': [55, 60, 20, 25, 30]
})

df2 = pd.DataFrame({
    'Name': ['A', 'D', 'E'],
    'Age': [20, 23, 24],
    'Score': [20, 40, 80]
})

# 构建Name到Score的映射字典
score_dict = df2.set_index('Name')['Score'].to_dict()
# 累加Score,不存在的Name加0
df1['Score'] += df1['Name'].map(score_dict).fillna(0)
print(df1)

方法3:add方法批量更新

利用pandas的add方法,按索引匹配并累加,效率更高:

import pandas as pd

df1 = pd.DataFrame({
    'Name': ['A', 'B', 'C', 'D', 'E'],
    'Age': [20, 21, 22, 23, 24],
    'Score': [55, 60, 20, 25, 30]
})

df2 = pd.DataFrame({
    'Name': ['A', 'D', 'E'],
    'Age': [20, 23, 24],
    'Score': [20, 40, 80]
})

# 复制原数据避免修改源DF
result = df1.copy()
# 将DF2转为以Name为索引的Series
df2_score = df2.set_index('Name')['Score']
# 批量累加Score,未匹配项填充0
result['Score'] = result['Score'].add(df2_score, fill_value=0)
print(result)

以上三种方法均能实现需求,其中方法2和3无需额外合并操作,处理大数据量时效率更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:44:55