簡體   English   中英

如何使用groupby在pandas中以相反的順序對列求和

[英]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進行反轉。 然后我們可以使用shiftcumsum只考慮“未來”值:

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 ,請transformsum並減去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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM