在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操作,可以将求和函数用于满足(或超过一个记录)阈值吗?目标是至少达到或超过阈值,然后停止累积...
这里我使用的是np.sign
-1表示小于,0表示相等,1表示较大