如何使用groupby按相反顺序对列求和

lnvxswe2  于 2021-09-29  发布在  Java
关注(0)|答案(3)|浏览(291)

我目前需要复制这个数据集,在这里我必须按主题复制groupby,并计算将来有多少人的得分为1。我必须倒数它们,但我不知道如何才能做到这一点,同时还有GroupBySubject 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()

这给了我这些值,但按降序求和,我需要我的值从下到上。

wb1gzix0

wb1gzix01#

我们可以使用 loc 使用前倒转 groupby transform . 然后我们可以使用 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

zkure5ic

zkure5ic2#

要找到多少 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
aij0ehis

aij0ehis3#

首先对其进行排序:

data['Sum']= data.sort_values(by='Score', ascending=False).groupby(['SubjectID copy'])['Score'].cumsum()

相关问题