我的DataFrame
看起来像这样:
score num_participants
0 20
1 15
2 5
3 10
4 12
5 15
我需要找到score
的参与者人数大于或等于当前行中的score
:
score num_participants num_participants_with_score_greater_or_equal
0 20 77
1 15 57
2 5 42
3 10 37
4 12 27
5 15 15
所以,我试图将当前行和它下面的所有行相加。数据大约有5000行,因此我无法通过索引手动设置它。 cumsum
没有做到这一点,我不确定是否有一种简单的方法可以做到这一点。我花了很多时间试图解决这个问题,所以任何帮助都会受到赞赏。
答案 0 :(得分:7)
这是反向cumsum
。翻转列表cumsum
,然后反转。
df.iloc[::-1].cumsum().iloc[::-1]
score num_participants
0 15 77
1 15 57
2 14 42
3 12 37
4 9 27
5 5 15
答案 1 :(得分:1)
除非score
已经排序,否则如何
df['num_participants_with_score_greater_or_equal'] = df.sort_values('score', ascending=False).num_participants.cumsum()
使score
的顺序正确。您可以在.sort_index()
之后恢复原始订单。