熊猫:总计所有行

时间:2016-06-01 02:45:11

标签: python pandas dataframe

我的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没有做到这一点,我不确定是否有一种简单的方法可以做到这一点。我花了很多时间试图解决这个问题,所以任何帮助都会受到赞赏。

2 个答案:

答案 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()之后恢复原始订单。