gpt4 book ai didi

pandas - 组内的 Cumsum 并在 Pandas 条件下重置

转载 作者:行者123 更新时间:2023-12-01 23:38:42 26 4
gpt4 key购买 nike

我有一个包含两列 ID 和事件的数据框。事件为 0 或 1。我想要一个包含自上次事件为 1 以来不断增加的数字的新列。但是,计数应仅在一个组 (ID) 内。如果事件为 1,则计数列应重置为 0,然后重新开始计数。

所以,我有一个包含以下内容的数据框:

enter image description here

想要的是这个:

enter image description here

有人能帮我吗?

最佳答案

我们在这里使用了一个新的段“G”

df['G']=df.groupby('ID').Activeity.apply(lambda x :(x.diff().ne(0)&x==1)|x==1)

df.groupby([df.ID,df.G.cumsum()]).G.apply(lambda x : (~x).cumsum())

Out[713]:
0 1
1 2
2 0
3 1
4 2
5 1
6 2
7 0
8 1
9 0
10 1
11 1
12 0
13 0
14 1
15 2
Name: G, dtype: int32

数据输入
df=pd.DataFrame({'ID':list('AAAAABBBBBBCCCCC'),'Activeity':[0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0]})

解释 :
Here we get the new para 'G'
df['G']=df.groupby('ID').Activeity.apply(lambda x :(x.diff().ne(0)&x==1)|x==1)
df
Out[134]:
Activeity ID G
0 0 A False
1 0 A False
2 1 A True
3 0 A False
4 0 A False
5 0 B False
6 0 B False
7 1 B True
8 0 B False
9 1 B True
10 0 B False
11 0 C False
12 1 C True
13 1 C True
14 0 C False
15 0 C False

然后我们做 cumsum对于 G,是为了获取我们应该将数字设置为 0 的循环
df.G.cumsum()
Out[135]:
0 0
1 0
2 1
3 1
4 1
5 1
6 1
7 2
8 2
9 3
10 3
11 3
12 4
13 5
14 5
15 5
Name: G, dtype: int32

关于pandas - 组内的 Cumsum 并在 Pandas 条件下重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47741626/

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