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

如何在Pandas DataFrame中自动筛选占总百分比最高的前N行数据

解决方法

核心思路是先计算降序排列后的累计百分比,再通过自定义的累计占比阈值自动匹配需要截取的行数。

完整实现代码

import pandas as pd
import numpy as np

# 1. 构造原始数据
df = pd.DataFrame({
    'name':['Sara',  'John', 'Christine','Paul',  'Jo', 'Zack','Chris', 'Mathew', 'Suzan'],
    'visits': [0, 0, 1,2, 3, 9,6, 10, 3]
})

# 2. 计算单条数据占比
df['percent'] = df['visits'] / np.sum(df['visits'])

# 3. 按占比降序排序并重置索引
df_sorted = df.sort_values(by='percent', ascending=False).reset_index(drop=True)

# 4. 计算累计占比
df_sorted['cum_percent'] = df_sorted['percent'].cumsum()

# 5. 自定义累计占比阈值,比如要求总和至少达到70%
threshold = 0.7

# 6. 自动计算需要截取的行数N
# 写法1:保留到刚好让累计占比≥阈值的行,保证总占比达标
n = df_sorted[df_sorted['cum_percent'] >= threshold].index[0] + 1

# 写法2:保留累计占比≤阈值的最大行数,保证总占比不超过阈值
# n = df_sorted[df_sorted['cum_percent'] <= threshold].index[-1] + 1

# 7. 筛选最终结果
result = df_sorted.head(n)

运行示例结果

使用你提供的示例数据、阈值设为0.7时,自动计算得到n=3,输出结果如下:

namevisitspercentcum_percent
0Mathew100.2941180.294118
1Zack90.2647060.558824
2Chris60.1764710.735294

你可以根据业务需求灵活调整threshold的数值,无论数据波动多大,都会自动匹配对应的截取行数。如果需要过滤掉占比为0的无效数据,在排序前添加df = df[df['percent'] > 0]即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:48:04