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

Get sum of group subset using pandas groupby

我有一个如图所示的数据框。使用 python,我想得到每个 'Id' 组的 'Value' 的总和,直到第一次出现 'Stage' 12.

df = pd.DataFrame({'Id':[1,1,1,2,2,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, 12],
               'Value': [5, 4, 6, 12, 2, 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()

详情

transformidxmax 将 return 第一个索引与所有 groupby 行的 12 匹配,然后我们需要过滤 df小于 index 以获取数据,直到前 12 个出现。