如何在Python中获取Pandas DataFrame列值的唯一组合
获取Pandas DataFrame中列值的唯一组合
针对你的需求,分两种场景给出解决方案:
1. 保留有序的唯一组合(顺序不同算不同组合)
如果只需要去除完全重复的行(即col1和col2的值完全一致的重复项),直接使用drop_duplicates()即可:
# 获取有序的唯一组合列表 ordered_unique_pairs = df.drop_duplicates()[['col1', 'col2']].values.tolist() print(ordered_unique_pairs) # 输出:[['Date1', 'Date2'], ['Date1', 'Date3'], ['Date1', 'Date4'], ['Date2', 'Date1'], ['Date2', 'Date3'], ['Date2', 'Date4'], ['Date3', 'Date1'], ['Date3', 'Date2'], ['Date3', 'Date4'], ['Date4', 'Date1'], ['Date4', 'Date2'], ['Date4', 'Date3']]
2. 获取无序的唯一组合(顺序不同算同一组合)
从需求描述来看,你大概率需要这种效果(比如('Date1','Date2')和('Date2','Date1')只保留一个)。可以通过先对每行的两个值排序,再去重实现:
方法一:用apply生成排序后的元组
# 对每行的col1和col2排序,生成统一顺序的元组 df['sorted_pair'] = df.apply(lambda row: tuple(sorted([row['col1'], row['col2']])), axis=1) # 提取唯一的组合并转为列表 unordered_unique_pairs = df['sorted_pair'].unique().tolist() print(unordered_unique_pairs) # 输出:[('Date1', 'Date2'), ('Date1', 'Date3'), ('Date1', 'Date4'), ('Date2', 'Date3'), ('Date2', 'Date4'), ('Date3', 'Date4')]
方法二:集合推导式(更简洁)
无需额外创建列,利用集合自动去重的特性直接处理:
unordered_unique_pairs = list({tuple(sorted(pair)) for pair in df[['col1', 'col2']].values}) print(unordered_unique_pairs) # 输出同上,顺序可能因集合特性略有不同,但都是唯一的无序组合
内容的提问来源于stack exchange,提问作者EthanT
相关产品推荐
相关产品推荐

