如何用Pandas筛选DataFrame跨列重复值并存入列表
使用Pandas找出DataFrame中的跨列重复值
需求说明:遍历DataFrame,将至少在另一列中出现过的值存入列表。规则为:同一列内的重复值不计入统计,仅保留跨列存在的重复值——只要在其他列出现过一次,就符合条件。
示例数据:
import pandas as pd test_df = pd.DataFrame({'area_1': ['John', 'Mike', 'Mary', 'Sarah'], 'area_2': ['John', 'Bob', 'Mary', 'Mary'], 'area_3': ['Jane', 'Sarah', 'David', 'Michael'], 'area_4': ['Diana', 'Mike', 'Bill', 'Bill']})
预期输出:combined_insp = ['John', 'Mary', 'Sarah', 'Mike']
解决方案一:基础遍历实现
# 初始化空列表 combined_insp = [] # 1. 提取每一列的唯一值集合(自动排除同列重复) column_unique_values = [set(column) for column in test_df.values.T] # 2. 统计每个值出现在多少个不同列中 value_column_count = {} for col_values in column_unique_values: for val in col_values: value_column_count[val] = value_column_count.get(val, 0) + 1 # 3. 筛选出在至少2列出现过的值 combined_insp = [val for val, count in value_column_count.items() if count >= 2] print(combined_insp)
解决方案二:Pandas简洁实现
利用Pandas内置方法简化操作,代码更紧凑:
# 对每列取唯一值 → 堆叠为一维序列 → 统计值出现的列数 value_col_counts = test_df.apply(pd.Series.unique).stack().value_counts() # 筛选出在≥2列出现的值,转为列表 combined_insp = value_col_counts[value_col_counts >= 2].index.tolist() print(combined_insp)
逻辑说明
两种方法的核心逻辑一致:
- 先排除同一列内的重复值,只保留每列的唯一值;
- 统计每个值在多少个不同列中出现;
- 筛选出出现列数≥2的值,这些就是跨列存在的重复值。
内容的提问来源于stack exchange,提问作者Anthony Stokes
相关产品推荐
相关产品推荐

