如何移除Pandas DataFrame中指定列唯一值计数小于阈值的行?
移除DataFrame中特定列唯一值出现次数低于阈值的行
直接上实操方法,假设你的DataFrame叫df,要处理的列是'reason',阈值设为5:
方法一:分步处理(清晰直观)
- 先统计目标列每个值的出现次数:
reason_counts = df['reason'].value_counts() - 筛选出出现次数≥阈值的有效值:
valid_reasons = reason_counts[reason_counts >= 5].index - 用有效值过滤原DataFrame:
filtered_df = df[df['reason'].isin(valid_reasons)]
方法二:一步到位(高效简洁)
用groupby结合transform直接计算每组的大小,省去中间变量:
filtered_df = df[df.groupby('reason')['reason'].transform('count') >= 5]
举个例子
假设你的原始数据是这样的:
import pandas as pd data = { 'reason': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'C', 'D', 'D', 'D', 'D'], 'other_col': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] } df = pd.DataFrame(data)
运行上述代码后,filtered_df里只会保留reason为'A'的行——因为它是唯一出现次数≥5的类别,B、C、D的次数都不够,会被自动移除。
小提示
value_counts()默认返回降序排列的结果,方便你快速查看哪些类别符合要求transform('count')会把每组的计数对应到原DataFrame的每一行,相当于给每行标记了它所属类别的总出现次数,直接和阈值对比就行
内容的提问来源于stack exchange,提问作者demetere._
相关产品推荐
相关产品推荐

