如何用Pandas剔除某列数值排名前n%的行?
用Pandas按百分比剔除高count值用户的方法
针对你百万行的DataFrame,要剔除count列排名前n%的用户,用Pandas的分位数或百分比排名功能就能搞定,不用全量排序,效率更高:
方法一:基于数值阈值(quantile)
这种方法先算出count列的分位数阈值,保留低于该阈值的行,适合关注数值而非严格行数占比的场景:
# 示例:剔除前5%的用户,计算95%分位数作为阈值 n_percent = 5 threshold = df['count'].quantile(1 - n_percent / 100) # 筛选出count小于阈值的行,即剔除前5%的高count用户 filtered_df = df[df['count'] < threshold]
如果有多个用户的count刚好等于阈值,剔除的实际比例可能略高于n%,因为这些用户都会被排除。
方法二:严格按行数百分比(rank)
如果需要精准剔除前n%的行数,用百分比排名功能:
n_percent = 5 # 计算每行的百分比排名(降序,最大的count排名为1%) df['pct_rank'] = df['count'].rank(pct=True, ascending=False) # 保留排名在n%之后的行,再删除临时列 filtered_df = df[df['pct_rank'] > n_percent / 100].drop('pct_rank', axis=1)
这种方式会严格按行数占比筛选,即使有重复的count值,也能保证剔除的行数刚好是前n%左右。
两种方法都适合百万行规模的数据,不用全量排序,性能远优于先排序再取前n行的方式。
内容的提问来源于stack exchange,提问作者DS Park
相关产品推荐
相关产品推荐

