使用pandas groupby获取组子集的总和

问题描述

我有一个数据框,如图所示。我想使用python获取每个“ Id”组的“值”总和,直到首次出现“ Stage” 12。

df = pd.DataFrame({'Id':[1,1,2,2],'Date': ['2020-04-23','2020-04-25','2020-04-28','2020-04-20','2020-05-01','2020-05-05','2020-05-12'],'Stage': [11,12,15,11,14,12],'Value': [5,4,6,8,3]})

Id  Date      Stage Value
 1  2020-04-23  11    5
 1  2020-04-25  12    4
 1  2020-04-28  15    6
 2  2020-04-20  11   12
 2  2020-05-01  14    2
 2  2020-08-05  12    8
 2  2020-05-12  12    3

我想要的输出

Id  Value
 1  9
 2  22

如果有人可以帮助,将非常感激。

解决方法

让我们尝试使用groupby transform idxmax过滤数据帧,然后进行另一轮groupby

idx = df['Stage'].eq(12).groupby(df['id']).transform('idxmax')
output = df[df.index <= idx].groupby('id')['Value'].sum().reset_index()

详细信息

带有transform的{​​{1}}将返回所有idxmax行的第一个索引匹配为12的索引,然后我们需要用groupby过滤df直到获得前12个数据为止,它的数量要少于此。