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

Python2.7中如何查找DataFrame行内公共元素及行内极值

解决方案:处理DataFrame每行的重复元素、最小/最大值

嘿,我来帮你搞定这个问题!Pandas确实没有直接的内置函数一步实现你要的所有功能,但我们可以结合apply()和一些基础的Python工具轻松搞定,而且完全支持任意列数的场景哦。

先回顾你的示例数据

首先,先把你的示例代码跑一遍,明确数据情况:

import pandas as pd
df = pd.DataFrame({'col1':[1,2,3], 'col2':[2,3,4],'col3':[2,1,3]})
print(df)

输出结果是:

col1  col2  col3
0     1     2     2
1     2     3     1
2     3     4     3

1. 提取每行的重复元素(也就是你说的“公共元素”)

你要的是每行中出现至少两次的元素对吧?我们可以写一个自定义小函数,对每行统计元素出现频率,筛选出重复的:

def get_common_elements(row):
    # 统计每行里每个元素的出现次数
    element_counts = row.value_counts()
    # 挑出出现次数≥2的元素,转成列表返回
    common_elements = element_counts[element_counts >= 2].index.tolist()
    # 如果没有重复元素就返回None,也可以改成空列表[]
    return common_elements if common_elements else None

# 把这个函数应用到DataFrame的每一行,生成新列
df['common_elements'] = df.apply(get_common_elements, axis=1)

2. 计算每行的最小值和最大值

这个就简单多了,直接用Pandas自带的按行计算方法:

df['row_min'] = df.min(axis=1)
df['row_max'] = df.max(axis=1)

最终结果

运行完上面的代码后,你的DataFrame会变成这样:

col1  col2  col3 common_elements  row_min  row_max
0     1     2     2             [2]        1        2
1     2     3     1            None        1        3
2     3     4     3             [3]        3        4

完全符合你的需求:第0行的公共元素是2,第2行是3,每行的最小最大值也都准确计算出来了。

支持任意n列的情况

这个方案完全不限制列数,不管你的DataFrame有3列还是10列,apply()都会遍历每一行,value_counts()也会自动处理所有列的元素,直接套用就行。

额外小优化:只取第一个重复出现的元素

如果你不需要所有重复元素,只想要第一个出现的重复项,可以修改一下函数:

def get_first_common_element(row):
    seen = set()
    for num in row:
        if num in seen:
            return num
        seen.add(num)
    return None

df['first_common_element'] = df.apply(get_first_common_element, axis=1)

这样第0行返回2,第2行返回3,第1行因为没有重复元素就返回None啦。


内容的提问来源于stack exchange,提问作者Chetan.B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:36:39