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

如何在Python中合并三列生成含唯一值的新列?

Python合并多列并按行去重生成新列的解决方法

用str.cat只能完成基础的列拼接,没法实现按行去重的需求,这里给你两种直接可用的解决办法:

方法一:逐行处理(简单直观)

利用apply对每行数据做去重后拼接,还能保留元素原本的出现顺序:

import pandas as pd

# 示例数据
data = {
    'Col1': ['a', 'c', 'd'],
    'Col2': ['b', 'a', 'a'],
    'Col3': ['b', 'a', 'e']
}
df = pd.DataFrame(data)

# 生成去重后的拼接列
df['concate_col'] = df[['Col1', 'Col2', 'Col3']].apply(
    lambda x: ','.join(sorted(set(x), key=x.index)),
    axis=1
)
  • set(x)自动去重每行的三个值
  • sorted(..., key=x.index)用来保持元素在原列中的出现顺序(比如第一行先出现a再出现b,结果就是a,b而非b,a)
  • ','.join(...)把去重后的元素用逗号连接

方法二:用stack+groupby(高效适配大数据量)

如果你的数据量很大,apply逐行处理效率偏低,可以用这种向量化的方式:

# 将多列转成行结构,保留原行索引
stacked_data = df[['Col1', 'Col2', 'Col3']].stack()

# 按原行索引分组,去重后拼接
df['concate_col'] = stacked_data.groupby(level=0).apply(
    lambda x: ','.join(sorted(x.unique(), key=list(x).index))
)
  • stack()把每一行的多个列值转成同一索引下的多行数据
  • groupby(level=0)按原DataFrame的行索引分组
  • x.unique()对每组(即原每行)的元素去重,再按原顺序拼接

两种方法运行后都能得到你需要的结果:

Col1Col2Col3concate_col
abba,b
caac,a
daed,a,e

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:03:14