问题描述
我有一个数据框,如图所示。我想使用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个数据为止,它的数量要少于此。