python-3.x - 使用 pandas groupby 获取组子集的总和

标签 python-3.x pandas group-by subset-sum

我有一个如图所示的数据框。使用 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()

详情

带有 idxmaxtransform 将为所有 groupby 行返回第一个与 12 匹配的索引,然后我们需要过滤 dfindex 小于该值以获取数据,直到前 12 个出现。

关于python-3.x - 使用 pandas groupby 获取组子集的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63697647/

相关文章:

python - 应用中的 Pandas 就地操作

mysql - 有没有一种方法可以使用一列进行分组,但对于给定的组来说它可以等于一组值?

Mysql group_concat 具有来自另一行的不同值

python - 在 pandas 的另一列上使用 group by 和条件

python - 阶乘数字和谜题、时间复杂度调查

python - 如何捕获并发.futures._base.TimeoutError

python - 为什么在比较 float 结果时循环不开始?

python - 通过将行交换为列并计算 Pandas 中每列的总和,将单个 df 转换为多个 df

python - 如何更改绘图线样式并使用两个 Y 轴代替一个 X 轴?

python - 在 ubuntu 16.04 lts 上安装 numba 0.30.1