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

在R语言的DataFrame列表中提取各DataFrame的y列共有值

多DataFrame提取所有y列共有值的解决方案

直接用reduce(intersect, df_list)失效的核心原因是:intersect(pandas的pd.intersect)是按行维度做匹配,要求行的内容和位置完全对应,而非提取列值的集合交集——这和列长度、值的位置无关,本质是用错了方法。

正确思路是先把每个DataFrame的y列转成值集合,再求所有集合的交集:

  1. 遍历df_list,提取每个DataFrame的y列并转成集合(自动去重,且不考虑顺序)
  2. 用reduce对所有集合做交集操作,得到所有列都存在的值
  3. 把最终集合转成列表,就是预期结果

代码实现

from functools import reduce
import pandas as pd

# 模拟你的df_list(实际使用时替换为自己的列表)
df1 = pd.DataFrame({'y': ['apple', 'grape', 'banana']})
df2 = pd.DataFrame({'y': ['grape', 'apple', 'orange']})
df3 = pd.DataFrame({'y': ['apple', 'grape', 'mango']})
df4 = pd.DataFrame({'y': ['grape', 'apple', 'pear']})
df_list = [df1, df2, df3, df4]

# 计算所有y列的共同值
common_y_values = reduce(lambda set_a, df: set_a & set(df['y']), df_list, set(df_list[0]['y']))
common_y_values = list(common_y_values)

print(common_y_values)  # 输出: ['apple', 'grape']

补充说明

  • 若某个DataFrame的y列有重复值,转成集合时会自动去重,不影响最终结果(只要值存在至少一次即符合条件)
  • 该方法完全不受DataFrame列长度、值的位置影响,仅关注值是否存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:57:38