[英]How to sum column in reverse order in pandas with groupby
我目前需要復制這個數據集,我必須在其中按主題 ID 副本分組,並計算將來有多少得分為 1。 我基本上必須反向計算它們,但是我不確定如何同時執行此操作和 groupby 主題 ID。
SubjectID copy Score Number of All Future Hosp for O column
0 phchp003 1 4
1 phchp003 1 3
2 phchp003 1 2
3 phchp003 1 1
4 phchp003 1 0
5 phchp004 1 4
6 phchp004 1 3
7 phchp004 1 2
8 phchp004 1 1
9 phchp004 1 0
10 phchp006 0 3
11 phchp006 0 3
12 phchp006 0 3
13 phchp006 0 3
14 phchp006 1 2
15 phchp006 1 1
16 phchp006 1 0
我目前有
data['Sum']= data.groupby(['SubjectID copy'])['Score'].cumsum()
這給了我值,但按降序求和,我需要我的從下到上。
在使用groupby transform
之前,我們可以使用loc
進行反轉。 然后我們可以使用shift
和cumsum
只考慮“未來”值:
data['Sum'] = (
data.loc[::-1] # Reverse DataFrame
.groupby(['SubjectID copy'])['Score'] # Groups
.transform(lambda s: s.shift(fill_value=0).cumsum()) # handle transformation
)
data
:
SubjectID copy Score Sum
0 phchp003 1 4
1 phchp003 1 3
2 phchp003 1 2
3 phchp003 1 1
4 phchp003 1 0
5 phchp004 1 4
6 phchp004 1 3
7 phchp004 1 2
8 phchp004 1 1
9 phchp004 1 0
10 phchp006 0 3
11 phchp006 0 3
12 phchp006 0 3
13 phchp006 0 3
14 phchp006 1 2
15 phchp006 1 1
16 phchp006 1 0
要找出未來有多少個1
,請transform
組sum
並減去cumsum
。
df['Sum'] = (df.groupby('SubjectID copy')['Score'].transform('sum')
- df.groupby('SubjectID copy')['Score'].cumsum())
SubjectID copy Score Sum
0 phchp003 1 4
1 phchp003 1 3
2 phchp003 1 2
3 phchp003 1 1
4 phchp003 1 0
5 phchp004 1 4
6 phchp004 1 3
7 phchp004 1 2
8 phchp004 1 1
9 phchp004 1 0
10 phchp006 0 3
11 phchp006 0 3
12 phchp006 0 3
13 phchp006 0 3
14 phchp006 1 2
15 phchp006 1 1
16 phchp006 1 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.