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

Pandas合并两个DataFrame按多列匹配后拼接字符串、求和填充目标列

你可以先对df2做分组聚合,再和df1左连接即可实现需求,完整实现代码如下:

import pandas as pd
import numpy as np

# 示例数据
data1 = {'Name': ['Alex','Alex','Cristiano','Cristiano','Fernando','Jonas','William'], 
         'Color': ['Blue','Red','Black','Blue','Yellow','Pink','Green'], 
         'Codes': ['','','','','','',''], 
         'Values': [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]}
data2 = {'Name': ['Jonas','Alex','Cristiano','Cristiano','Alex'], 
         'Color': ['Pink','Red','Black','Blue','Red'], 
         'Codes': ['1456','1450','1453','1530','1459'], 
         'Values': [12000.00,5000.50,78000.00,2000.00,1500.00]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# 对df2按Name、Color分组,分别对两列做对应聚合
df2_agg = df2.groupby(['Name', 'Color'], as_index=False).agg(
    Codes=('Codes', ', '.join),
    Values=('Values', 'sum')
)

# 左连接合并到df1,保留df1所有行
df1 = df1[['Name', 'Color']].merge(df2_agg, on=['Name', 'Color'], how='left')
# 无匹配的Codes填充为空字符串
df1['Codes'] = df1['Codes'].fillna('')

最终输出结果和需求一致:

Name   Color       Codes   Values
0       Alex    Blue                 NaN
1       Alex     Red  1450, 1459   6500.5
2  Cristiano   Black        1453  78000.0
3  Cristiano    Blue        1530   2000.0
4   Fernando  Yellow                 NaN
5      Jonas    Pink        1456  12000.0
6    William   Green                 NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:03