2016-06-01 36 views
2

我有一個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並沒有這樣做,我不確定是否有簡單的方法來做到這一點。我花了一段時間試圖解決這個問題,所以任何幫助將不勝感激。

回答

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

由於'ix'很難解釋語義,'iloc'現在比'ix'更適合位置索引。 – DSM

+0

@DSM thx,我贊同偏好。 – piRSquared

1

除非score已經排序,如何

df['num_participants_with_score_greater_or_equal'] = df.sort_values('score', ascending=False).num_participants.cumsum() 

使score是正確的順序。之後,您可以恢復原始訂單.sort_index()

+0

是的,它已經排序。 – Anastasia

+0

錯誤地理解了'需要找到分數較低的參與者'的觀點。 – Stefan