python - 从满足条件的最后一行开始的 Pandas 累积总和

标签 python pandas

我有以下形式的数据框:

|----------|----|------|
|date      |type|inflow|
|----------|----|------|
|2017-01-01|I   |  3500|
|2017-02-01|A   |    23|
|2017-07-01|A   |    44|
|2017-09-01|A   |    55|
|2017-12-01|A   |    12|
|2018-01-01|I   |  3800|
|2018-03-01|A   |    87|
|2018-05-01|A   |    34|
|2018-07-01|A   |    23|
|----------|----|------|
I 是初始流入,As 是额外流入。它们不一定按年份分组,日期可以是任意的。我想要每行的累积总和,从我最后一次遇到 I 开始。所以当我遇到另一个 I 时,累积总和应该重置。如果有帮助,两个 Is 之间的最大 As 数可以是 5。
我尝试使用 apply 和 rollapply,但无法弄清楚如何在不一致的滚动窗口上应用它们。
我如何使用 Pandas 做到这一点?

最佳答案

让我们试试 GroupBy.cumsum :

df['inflow_cumsum'] = df.groupby(df['type'].eq('I').cumsum())['inflow'].cumsum()
df

         date type  inflow  inflow_cumsum
0  2017-01-01    I    3500           3500
1  2017-02-01    A      23           3523
2  2017-07-01    A      44           3567
3  2017-09-01    A      55           3622
4  2017-12-01    A      12           3634
5  2018-01-01    I    3800           3800
6  2018-03-01    A      87           3887
7  2018-05-01    A      34           3921
8  2018-07-01    A      23           3944

详情df['type'].eq('I').cumsum()用于标记流入组以执行分组累计总和。
请参阅下面的可视化:
type  type == "I"  (type == "I").cumsum()
   I         True                       1
   A        False                       1
   A        False                       1
   A        False                       1
   A        False                       1
   I         True                       2
   A        False                       2
   A        False                       2
   A        False                       2
您会注意到 1s 和 2s 列将唯一标识组以执行 cumsum。

关于python - 从满足条件的最后一行开始的 Pandas 累积总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62892802/

相关文章:

python - 基于连续时间步计算事件

python - Pandas 在 groupby 中返回空组

python - 如何按列 Id 对数据框进行分组,然后在组内标记 2 天的间隔?

python - `cat` 在 ipython 交互式 shell 中如何工作?

python - 多重最大标注 matplotlib

python - 字典列表仅在每次迭代中存储最后附加的值

python - 从css节点scrapy中提取文本

python - 'type' 类型的参数不可迭代

python - 如何在 Python 中将表示为字符的数字简称为数字

pandas - 确保 Pandas MultiIndex 中的字典序排序