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
相关产品推荐
相关产品推荐

