numpy Groupby累积,当累积变为负值时重置

sulc1iza  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(172)

我有一个Pandas数据框:

Category  Value
0         A      7
1         A      6
2         A      8
3         A     -9
4         A    -20
5         A      5
6         A      6
7         B      8
8         B      9
9         B    -20
10        B     -5
11        B    -30
12        B      5

我想按“类别”组累积列“值”,但是,当累积值小于零时,累积值将被重置。我在列“累积”中的预期结果:

Category  Value  Cumulative
0         A      7           7
1         A      6          13
2         A      8          21
3         A     -9          12
4         A    -20           0
5         A      5           5
6         A      6          11
7         B      8           8
8         B      9          17
9         B    -20           0
10        B     -5           0
11        B    -30           0
12        B      5           5

在“累积”中的结果,我需要添加一个“结果”,如果“累积”为零,它将从前一行取“累积”的负数,否则取“值”,预期结果:

如何在phyton中编码?
预期成果

wmvff8tz

wmvff8tz1#

这是不容易向量化的,你需要循环:

def cumsum_reset(s):
    S = 0
    out = []
    for x in s:
        S += x
        S = max(0, S)
        out.append(S)
    return out

df['Cumulative'] = df.groupby('Category')['Value'].transform(cumsum_reset)

输出:

Category  Value  Cumulative
0         A      7           7
1         A      6          13
2         A      8          21
3         A     -9          12
4         A    -20           0
5         A      5           5
6         A      6          11
7         B      8           8
8         B      9          17
9         B    -20           0
10        B     -5           0
11        B    -30           0
12        B      5           5

相关问题