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

Pandas如何获取DataFrame中3个object类型文本列的去重并集

问题描述
  • 需求:提取DataFrame中3个object类型列A、B、C的所有值,做全局并集去重
  • 示例数据:
ABC
CatDogMonkey
DogHorseCat
  • 期望输出:[Cat,Dog,Horse,Monkey]
  • 初始尝试代码:
df['union'] = df.apply(lambda x: x['A'].union(x['B']), axis=1)
  • 运行报错:

AttributeError: 'str' object has no attribute 'union'

报错原因
  1. 代码中x['A']、x['B']取到的是逐行单元格内的字符串值,字符串类型本身没有union方法,只有集合(set)类型支持该方法
  2. 原逻辑是逐行对单行的两个单元格值做操作,无法实现三列所有值的全局去重需求
可直接运行的实现方案

方案1:展平去重(推荐,保留值首次出现顺序)

通过stack()将三列的所有值展平为一维序列,去重后直接转列表即可:

# 提取三列所有值去重
union_list = df[['A', 'B', 'C']].stack().drop_duplicates().tolist()

如果需要对结果排序,可在去重后加排序逻辑:

# 去重+按字母排序
union_list = df[['A', 'B', 'C']].stack().drop_duplicates().sort_values().tolist()

方案2:集合取并集

将每列的值转为集合后做并集运算,最后转成列表:

union_list = list(set(df['A']).union(set(df['B'])).union(set(df['C'])))

注意:集合是无序结构,该方案得到的结果顺序不固定,对顺序有要求时优先选方案1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:48:13