从满足条件的最后一行开始的累计总和

2024-10-16 17:18:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下形式的数据帧:

|----------|----|------|
|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是初始流入量,以及额外流入量。它们不一定按年份分组,日期可以是任意的。我希望在每一行中都有一个累积和,从我上次遇到一个I开始。因此,当我遇到另一个I时,累积和应该重置。如果有帮助,两个I之间的As的最大数量可以是5

我尝试使用apply和rollappy,但无法找出如何在不一致的滚动窗口上应用它们。 我如何使用熊猫来实现这一点


Tags: 数据数量dateastype形式重置apply
1条回答
网友
1楼 · 发布于 2024-10-16 17:18:24

让我们试试^{}

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列将唯一标识要执行累计和的组

相关问题 更多 >