2016-06-01 6 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とし、その後逆にします。 scoreない限り

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'は最近の位置インデックス付けの方が好まれます。 – DSM

+0

@DSM thx、私は好みに同意します。 – piRSquared

1

はすでにおよそ

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

scoreが正しい順序であることを確認する方法を、ソートされます。後で元の注文を.sort_index()で元に戻すことができます。

+0

はい、既にソートされています。 – Anastasia

+0

「スコアが低い参加者を探す必要がある」というあなたの意見を誤解しました。 – Stefan

関連する問題