我有一个如图所示的数据框。使用 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()
详情
带有 idxmax
的 transform
将为所有 groupby
行返回第一个与 12 匹配的索引,然后我们需要过滤 df
的 index
小于该值以获取数据,直到前 12 个出现。
关于python-3.x - 使用 pandas groupby 获取组子集的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63697647/