假设此输入并且您想要删除前 50% (0.5):
userID count
0 A 15
1 B 12
2 C 5
3 D 25
4 E 22
5 F 3
6 G 7
7 H 9
8 I 11
9 J 7
你可以sort_values按递减计数,然后计算百分比及其cumsum,最后使用boolean indexing过滤掉最高值:
target = 0.5
(df.sort_values(by='count', ascending=False)
.assign(pct=lambda d: d['count'].div(d['count'].sum()).cumsum())
.loc[lambda d: d['pct'].gt(target).shift().bfill()]
)
输出:
userID count
1 B 12
8 I 11
7 H 9
6 G 7
9 J 7
2 C 5
5 F 3
中间的:
userID count pct keep
3 D 25 0.215517 False
4 E 22 0.405172 False
0 A 15 0.534483 False
1 B 12 0.637931 True
8 I 11 0.732759 True
7 H 9 0.810345 True
6 G 7 0.870690 True
9 J 7 0.931034 True
2 C 5 0.974138 True
5 F 3 1.000000 True