如何将DataFrame中A、B两列的唯一值合并为一个列表?
Pandas合并两列唯一值为单一列表的解决方法
问题场景
给定如下DataFrame:
id A B 1 x k 2 y x 3 x l 4 x k
需要将A、B两列的所有唯一值合并为一个无嵌套、无重复的列表,期望结果:
unique_list = ['x', 'y', 'k', 'l']
错误原因分析
你尝试的代码:
list = df['A'].unique().tolist() list.append(df['B'].unique())
得到嵌套列表['x', 'y', ['x', 'k', 'l']],原因有两点:
append()方法会将传入的整个列表作为单个元素添加到原列表中,而非逐个添加元素;- 未处理A、B两列之间的重复值(比如A列的
x和B列的x重复)。
正确解决方法
方法一:简洁合并法(推荐)
直接将两列合并为一个Series,再取唯一值转列表:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'id': [1, 2, 3, 4], 'A': ['x', 'y', 'x', 'x'], 'B': ['k', 'x', 'l', 'k'] }) # 合并两列并获取唯一值列表 unique_list = pd.concat([df['A'], df['B']]).unique().tolist() print(unique_list) # 输出: ['x', 'y', 'k', 'l']
此方法一步到位,自动去重且保留元素首次出现的顺序。
方法二:分步扩展去重法
先获取A列唯一值列表,用extend()添加B列的唯一值,再去重:
# 分别获取两列的唯一值列表 a_unique = df['A'].unique().tolist() b_unique = df['B'].unique().tolist() # 扩展列表(逐个添加元素,而非嵌套) a_unique.extend(b_unique) # 去重并保留首次出现顺序 unique_list = list(dict.fromkeys(a_unique)) print(unique_list) # 输出: ['x', 'y', 'k', 'l']
如果不介意顺序,也可以用list(set(a_unique))去重,但dict.fromkeys能更好地保留元素出现的先后顺序。
内容的提问来源于stack exchange,提问作者chuachu
相关产品推荐
相关产品推荐

