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

Pandas DataFrame删除低频值行的最佳实践及示例

删除Pandas DataFrame低频行的最佳实践

嘿,处理这类删除低频值行的需求,Pandas里有几种高效且易维护的方法,我日常工作里最常用的是下面这两种,分享给你:

核心思路

本质就是先找出目标列中频数达到阈值的取值,再筛选出只包含这些取值的行,过滤掉低频的那些。


方法1:value_counts() + isin()(性能优先)

这种方法在处理大数据集时速度更快,代码也很简洁,是我最推荐的方案。

示例1:删除poo列中频数小于3的行

import pandas as pd

# 假设你的DataFrame是df
# 1. 统计poo列各值的频次
poo_freq = df['poo'].value_counts()
# 2. 筛选出频次≥3的取值
keep_poo = poo_freq[poo_freq >= 3].index
# 3. 过滤DataFrame,只保留符合条件的行
df_filtered_poo = df[df['poo'].isin(keep_poo)]

嫌步骤多?可以直接写成一行,可读性也不差:

df_filtered_poo = df[df['poo'].isin(df['poo'].value_counts()[df['poo'].value_counts() >= 3].index)]

示例2:删除bar列中频数小于3的行

逻辑完全一致,只需要替换列名就行:

df_filtered_bar = df[df['bar'].isin(df['bar'].value_counts()[df['bar'].value_counts() >= 3].index)]

方法2:groupby.filter()(可读性优先)

如果你的团队里有刚接触Pandas的同事,这种方法的逻辑更直观,一看就懂:按目标列分组,只保留组内行数≥阈值的组。

示例1处理poo列:

df_filtered_poo = df.groupby('poo').filter(lambda x: len(x) >= 3)

示例2处理bar列:

df_filtered_bar = df.groupby('bar').filter(lambda x: len(x) >= 3)

注意事项:处理缺失值

如果你的列里有NaN,默认value_counts()会忽略它。如果想把NaN也当作一个类别来统计(比如要保留出现≥3次的NaN行),记得加上dropna=False参数:

# 包含NaN的统计与过滤
poo_freq = df['poo'].value_counts(dropna=False)
keep_poo = poo_freq[poo_freq >= 3].index
df_filtered_poo = df[df['poo'].isin(keep_poo)]

方案选择建议

  • 处理百万级以上的大数据集:选value_counts()+isin(),性能更优;
  • 小数据集或追求代码可读性:选groupby.filter(),逻辑清晰好维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:06:08