You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何筛选Pandas DataFrame中至少N列值相同的行?

解决方法:筛选至少N列值相同的行

这问题我之前也碰到过,其实核心思路就是统计每行里重复次数最多的值出现了多少次,只要这个次数≥N,就把该行保留下来。下面给你两种实现方式,分别适合小数据和大数据场景:

方法一:简洁易读的Pandas原生实现

这个方法用apply配合value_counts,代码直观,容易理解:

import pandas as pd

def filter_rows_by_n_same_cols(df, N):
    # 对每行计算各值的出现次数,取最大值
    max_repeat = df.apply(lambda row: row.value_counts().max(), axis=1)
    # 筛选出重复次数≥N的行
    return df[max_repeat >= N]

测试你的示例数据

先构造你给出的DataFrame:

data = {
    'A': [1,5,3,5,1],
    'B': [1,4,4,5,2],
    'C': [1,2,3,5,1],
    'D': [3,1,2,5,2],
    'E': [5,2,3,4,1]
}
df = pd.DataFrame(data)

当N=3时:

filter_rows_by_n_same_cols(df, 3)

返回结果正好是行0、2、3、4,符合预期;

当N=4时:

filter_rows_by_n_same_cols(df, 4)

仅返回行3,完全正确。

方法二:大数据量下的加速版(Numpy实现)

如果你的DataFrame行数很多,apply的效率可能不够高,这时候可以用Numpy的bincount来加速计算:

import numpy as np

def filter_rows_by_n_same_cols_fast(df, N):
    arr = df.to_numpy()
    # 对每行用bincount统计元素出现次数,取最大值
    max_repeat = np.array([np.bincount(row).max() for row in arr])
    return df[max_repeat >= N]

这个方法的速度比纯Pandas实现快不少,适合处理十万级以上的行数据。

思路说明

不管哪种方法,核心逻辑都是:

  • 对每一行,统计每个值出现的次数
  • 找到该行中出现次数最多的值的频次
  • 判断这个频次是否≥N,是则保留该行

这样就完美覆盖了你需要的任意N的场景啦~

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

火山引擎 最新活动