Pandas groupby累积总和到阈值

问题描述 投票:0回答:1

在Pandas中使用groupby操作,cumsum函数可以用于满足(或超过一个记录)阈值吗?

目标是至少达到或超过]阈值,然后停止进一步累积。

示例数据帧:

import pandas as pd

data = [
{'a':'z', 'b': 5, 'c': 15}, {'a':'z', 'b': 10, 'c': 15},
'a':'z', 'b': 2, 'c': 15},
{'a': 'x', 'b': 10, 'c':31}, {'a':'x', 'b': 20, 'c': 31}, {'a':'x',
'b': 5, 'c': 31, {'a':'x', 'b': 9, 'c': 31}
] 
df = pd.DataFrame(data) 

df:

    a   b   c
0   z   5   15
1   z   10  15
2   z   2   15
3   x   10  31
4   x   20  31
5   x   5   31
6   x   9   31

我能看到的唯一方程式没有达到或超过X组的阈值:

df[df.groupby(by='a')['b'].cumsum()<=df['c']] 

    a   b   c
0   z   5   15
1   z   10  15
3   x   10  31
4   x   20  31

它适用于组z(即5 + 10 = 15),但不适用于组x b / c(即10 + 20 <31)。

对于x组,我需要满足(或超出一个记录)值31。因此,下一个记录也应累加(即10 + 20 + 5> = 31,但请注意,它不再累加任何值(即不累加)也取9)。

是否有一种方法可以应用达到或超过基准的累积记录?

预期/预期结果:

    a   b   c
0   z   5   15
1   z   10  15
3   x   10  31
4   x   20  31
5   x   5   31

通过在熊猫中使用groupby操作,可以将求和函数用于满足(或超过一个记录)阈值吗?目标是至少达到或超过阈值,然后停止累积...

pandas pandas-groupby cumsum
1个回答
0
投票

这里我使用的是np.sign -1表示小于,0表示相等,1表示较大

© www.soinside.com 2019 - 2024. All rights reserved.