gpt4 book ai didi

python - 根据变量字段进行分组,然后重置python中的计数器(cumcount)

转载 作者:行者123 更新时间:2023-12-01 00:46:06 25 4
gpt4 key购买 nike

我创建一个数据框

df = pd.DataFrame({"b": ['A','A','A','A','B', 'B','B','C','C','D','D', 'D','D','D','D','D','D','D','D','D'],"a": [-3,-4,2, -1, -3, -1,-7,-6, 1, 1, -1, 1,4,5,-3,2,3,4, -1, -2]})

检查负值

df['val'] = df.a < 0

添加一个累积计数总和列,其中当先前值不为负时计数器会增加。 (这意味着对于每个负值,计数器都会增加 1,但如果有多个 -ve 值,则假定它们是单个负值,并且计数器仍会增加 1)

df['val_1'] = (((df['val']) & (df['val'] != df['val'].shift())).cumsum()). the table is as below

b a val val_1
0 A -3 True 1
1 A -4 True 1
2 A 2 False 1
3 A -1 True 2
4 B -3 True 2
5 B -1 True 2
6 B -7 True 2
7 C -6 True 2
8 C 1 False 2
...

我想重新开始计算“b”字段中的新值。计数器应从值“B”开始。这方面的任何意见都会有帮助

最佳答案

您可以使用groupby-transform来做到这一点:

df['val_2'] = df.groupby('b')['val'].transform(lambda x: ((x) & (x != x.shift())).cumsum())

输出:

    b   a   val     val_1
0 A -3 True 1
1 A -4 True 1
2 A 2 False 1
3 A -1 True 2
4 B -3 True 1
5 B -1 True 1
6 B -7 True 1
7 C -6 True 1
8 C 1 False 1
9 D 1 False 0
10 D -1 True 1
11 D 1 False 1
12 D 4 False 1
13 D 5 False 1
14 D -3 True 2
15 D 2 False 2
16 D 3 False 2
17 D 4 False 2
18 D -1 True 3
19 D -2 True 3

请注意,如果第一个值为 true,则该值计为 1,这可能不是您想要的 - 但它是从您提供的代码中获取的。

关于python - 根据变量字段进行分组,然后重置python中的计数器(cumcount),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com