如何选取dataframe中某列累计和占该列原总和90%的顶部行?
解决方案
你可以用pandas内置的累计求和函数cumsum()快速实现这个需求,具体操作如下:
步骤1:构造示例数据(已有数据可直接跳过)
import pandas as pd df = pd.DataFrame({ 'category': ['A', 'B', 'C', 'D'], 'value': [4, 3, 2, 1] })
步骤2:计算累计占比并筛选符合条件的行
# 若原始数据没有按value从大到小排序,需要先执行下面这行保证优先取数值大的行,原始顺序符合要求可跳过 df = df.sort_values('value', ascending=False).reset_index(drop=True) # 计算value列总和 total_value = df['value'].sum() # 筛选累计和占总和比例≤90%的行 result = df[df['value'].cumsum() / total_value <= 0.9]
执行后得到的result就是你需要的输出:
category value 0 A 4 1 B 3 2 C 2
如果需要调整占比阈值,直接修改代码里的0.9为对应数值即可。
内容的提问来源于stack exchange,提问作者Shi Seashore
相关产品推荐
相关产品推荐

