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

如何在Pandas中按另一列将列值合并到单个单元格?

问题描述

我有如下DataFrame:

import pandas as pd
import numpy as np
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']})

需要按vin列将对应的所有module列值拼接起来,预期输出如下:

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'],
                   'New_module':['ABS-ABS-IPMA','ABS-ABS-IPMA','ABS-ABS-IPMA','BCCM','HPOC-ABS','HPOC-ABS','ABS','HPOC-ABS','HPOC-ABS','ABS']})

我曾尝试过一种需要复制DataFrame的方法:

df_merge = pd.merge(df2, df1.groupby(['vin'])['module'].apply(list), on ='vin', how ='left')
df_merge['module'] = df_merge['module'].astype('str').str.replace("\[|\]|\'| ","")
df_merge

请问有没有更简洁的代码可以实现预期效果?

简洁实现方法

可以用groupby结合transform方法,直接在原DataFrame上生成新列,无需额外合并操作,代码更简洁:

import pandas as pd
import numpy as np

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']})

# 按vin分组拼接module,直接映射回原行生成新列
df1['New_module'] = df1.groupby('vin')['module'].transform(lambda x: '-'.join(x))

print(df1)

代码说明

  • groupby('vin')['module']:按vin字段分组,提取每组的module列数据
  • transform(lambda x: '-'.join(x)):对每组执行字符串拼接操作,transform会自动将拼接结果按原DataFrame的行索引映射回去,保证同一vin的所有行都能拿到完整的拼接字符串
  • 全程无需创建中间DataFrame或执行合并操作,直接在原数据上新增目标列,代码更简洁高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:01:24