pandas Groupby并在组中而不是在组内进行转换

3phpmpom  于 2023-05-27  发布在  其他
关注(0)|答案(2)|浏览(104)

我试图得到这个数据框的第三列,给出前两列。
我不知道该搜索什么,它就像groupby('group')['weeklyTotal'].cumsum()的内部版本??
我知道我可以取出这两列,使它们不同,然后做groupby cumsum,但更喜欢在同一个dataframe中。
为了保存一点痛苦,这里有一个示例dataframe:
df = pd.DataFrame({'group':['A','A','A','B','B','B','C','C','C'], 'weeklyTotal':[1,1,1,3,3,3,2,2,2]})
| 集团|每周总计|累计总计|
| - -----|- -----|- -----|
| 一个|一个|一个|
| 一个|一个|一个|
| 一个|一个|一个|
| B| 3| 4|
| B| 3| 4|
| B| 3| 4|
| C类|2|六|
| C类|2|六|
| C类|2|六|

xlpyo6sf

xlpyo6sf1#

每组只保留一行drop_duplicates,计算cumsummap的值:

df['CumulativeTotal'] = df['group'].map(df.drop_duplicates(subset='group')
                                          .set_index('group')['weeklyTotal']
                                          .cumsum()
                                       )

或者,使用maskduplicated

df['CumulativeTotal'] = (df['weeklyTotal']
                         .mask(df['group'].duplicated(), 0)
                         .cumsum()
                        )

输出:

group  weeklyTotal  CumulativeTotal
0     A            1                1
1     A            1                1
2     A            1                1
3     B            3                4
4     B            3                4
5     B            3                4
6     C            2                6
7     C            2                6
8     C            2                6
kyvafyod

kyvafyod2#

这里是另一种方法:

m = df['group'].ne(df['group'].shift())
m.mul(df['weeklyTotal']).cumsum()

输出:

0    1
1    1
2    1
3    4
4    4
5    4
6    6
7    6
8    6

相关问题