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

如何在DataFrame匹配Name与Week时,为对应行Total添加对应Value值

问题:匹配DataFrame的Name和Week列,累加对应Value到Total列

现有两个Pandas DataFrame(df和df1),需求是:在df1中,只要Name和Week列的值与df中对应列完全匹配,就将df里对应的Value值加到df1的Total列上。

数据示例

df数据

df
                 Name    Week     Value
0                Frank  Week 3       8.0
1                  Bob  Week 3       8.0
2                  Bob  Week 4       8.0
3            Elizabeth  Week 3       4.0
4                Mario  Week 2       1.5
5                Mario  Week 3       2.5
6             Michelle  Week 3       8.0
7             Michelle  Week 4       1.0
8               Darwin  Week 1       1.0
9               Darwin  Week 2       0.5
10              Darwin  Week 3      11.0
11             Collins  Week 1       8.0
12             Collins  Week 2       6.0
13             Collins  Week 3      17.0
14             Collins  Week 4       7.0
15              Alexis  Week 1       1.5
16              Daniel  Week 3       2.0

df1数据

df1
                Name    Week  Total
0              Frank  Week 1     16
1              Frank  Week 1      3
2              Frank  Week 3     28
3              Frank  Week 3      1
4              Frank  Week 4      3
..               ...     ...    ...
310           Daniel  Week 2     50
311           Daniel  Week 3     56
312           Daniel  Week 4     78
313            Kevin  Week 4    162
314            Kevin  Week 4     46

期望输出

df1
                Name    Week  Total
0              Frank  Week 1     16
1              Frank  Week 1      3
2              Frank  Week 3     36
3              Frank  Week 3      9
4              Frank  Week 4      3
..               ...     ...    ...
310           Daniel  Week 2     50
311           Daniel  Week 3     58
312           Daniel  Week 4     78
313            Kevin  Week 4    162
314            Kevin  Week 4     46

解决方案

这里提供两种高效的实现方式:

方法一:利用索引映射(高效简洁)

先将df转换为以Name和Week为复合索引的Value映射,再通过索引匹配给df1的Total列累加对应值:

import pandas as pd

# 创建Name+Week到Value的映射
value_lookup = df.set_index(['Name', 'Week'])['Value']

# 匹配并累加,无匹配项则加0
df1['Total'] += df1.set_index(['Name', 'Week']).index.map(value_lookup).fillna(0).values

# 恢复df1的原索引(如果需要)
df1.reset_index(drop=True, inplace=True)

方法二:合并DataFrame(直观易理解)

通过左合并将df的Value列匹配到df1中,再进行累加计算:

import pandas as pd

# 左合并保留df1所有行,匹配Name和Week列
merged_df = df1.merge(df, on=['Name', 'Week'], how='left')

# 累加Total和Value(无匹配的Value填0)
merged_df['Total'] = merged_df['Total'] + merged_df['Value'].fillna(0)

# 移除临时的Value列,得到最终结果
df1 = merged_df.drop(columns=['Value'])

两种方法都能实现需求,方法一适合数据量较大的场景,效率更高;方法二逻辑更直观,适合新手理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:22:41