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

如何在Python中获取DataFrame或CSV文件所有列的共有值列表

获取Pandas所有列的共有值

原始DataFrame

import pandas as pd

df = pd.DataFrame({
    'colA': ['aa', 'bb', 'cc', 'dd', 'ee'],
    'colB': ['aa', 'bb', 'dd', 'qq', 'ee'],
    'colC': ['aa', 'bb', 'cc', 'ee', 'dd'],
    'colD': ['aa', 'bb', 'ee', 'cc', 'dd']
})

需求目标

提取所有列中都存在的共有值,期望输出为列表['aa', 'bb', 'dd', 'ee']或对应的单列DataFrame。

你尝试的代码(存在逻辑问题)

import pandas as pd

df = pd.read_csv('Bus Names Concat test.csv') # 读取输入CSV文件

df = df.stack().value_counts() 
core_list = df[df>2].index.tolist() # 硬编码筛选出现次数>2的值
print(len(core_list))
df_core = pd.DataFrame(core_list)

print(df_core)

问题分析:用固定阈值df>2筛选完全错误——共有值的判定标准是在每一列都存在,而非出现次数大于某个数。比如例子中cc出现3次,但并没有在colB中存在,会被误选;而硬编码的阈值也无法适配列数变化的场景。


正确解决方案

方法1:利用集合交集(简洁高效)

把每列的唯一值转为集合,再求所有集合的交集,直接得到所有列的共有值:

# 生成每列的唯一值集合
column_sets = [set(df[col]) for col in df.columns]
# 计算所有集合的交集
common_list = list(set.intersection(*column_sets))
# 转为DataFrame(如果需要)
common_df = pd.DataFrame(common_list, columns=['col'])

print("共有值列表:", common_list)
print("共有值DataFrame:")
print(common_df)

输出结果:

共有值列表: ['aa', 'bb', 'dd', 'ee']
共有值DataFrame:
   col
0  aa
1  bb
2  dd
3  ee

方法2:用Pandas的isin+all逐值验证

遍历所有唯一值,检查该值是否在每一列都存在:

# 获取所有非重复值
all_unique_values = pd.unique(df.values.ravel())
# 筛选在所有列都存在的值
common_list = [val for val in all_unique_values if df.isin([val]).all().all()]
common_df = pd.DataFrame(common_list, columns=['col'])

print(common_list)
print(common_df)

方法3:统计值出现的列数(适配含重复值的场景)

如果数据中存在重复值,可统计每个值出现在多少个不同列中,筛选出列数等于总列数的值:

stacked_data = df.stack()
# 统计每个值出现的不同列数
value_col_count = stacked_data.groupby(stacked_data).apply(lambda x: x.index.get_level_values(1).nunique())
# 筛选出在所有列都出现的值
common_list = value_col_count[value_col_count == len(df.columns)].index.tolist()
common_df = pd.DataFrame(common_list, columns=['col'])

print(common_list)
print(common_df)

内容的提问来源于stack exchange,提问作者Y. Pat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:50:29