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

Pandas合并DF时如何按vin匹配将module值逗号拼接存同一单元格

Python pandas按列匹配合并同组值到单元格实现

现有数据

import pandas as pd
df1 = pd.DataFrame({
    'vin':['aaa','aaa','aaa','bbb','ccc','ccc','ddd','eee','eee','fff'],
    'module':['ABS','ABS','IPMA','BCCM','HPOC','ABS','ABS','HPOC','ABS','ABS']
})
df2 = pd.DataFrame({'vin':['aaa','bbb','ccc','ddd','eee','fff']})

需求说明

按vin列做匹配,从df1中提取对应module列的取值写入df2,同一个vin对应的所有module值以逗号分隔,存入同一个单元格。
直接使用普通左连接写法的问题:

# 该写法会生成多行重复数据,不符合要求
df_merge = pd.merge(df2, df1[['module','vin']], on ='vin', how ='left')

期望输出效果:

vinmodule
aaaABS,ABS,IPMA
bbbBCCM
cccHPOC,ABS
dddABS
eeeHPOC,ABS
fffABS

实现方法

  • 方法1:先分组聚合再合并
    先对df1按vin分组,将同组的module值拼接为单个字符串,再和df2做左连接,不会产生重复行:
    # 分组聚合拼接同组module值
    df1_agg = df1.groupby('vin', as_index=False)['module'].apply(','.join)
    # 左连接匹配
    df_result = pd.merge(df2, df1_agg, on='vin', how='left')
    
  • 方法2:映射赋值(写法更简洁)
    先生成vin到拼接后module值的映射字典,直接通过map方法给df2新增列:
    module_map = df1.groupby('vin')['module'].apply(','.join).to_dict()
    df2['module'] = df2['vin'].map(module_map)
    

补充:如果需要对同组module值去重后再拼接,可以在拼接前去重,例如保留原有顺序去重的写法为lambda x: ','.join(dict.fromkeys(x)),不需要保留顺序可以直接用lambda x: ','.join(set(x))。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:01:14