Sie*_*ers 7 group-by count conditional-statements pandas cumsum
我有一个包含两列 ID 和活动的数据框。活动为 0 或 1。我想要一个包含自上次活动为 1 以来递增数字的新列。但是,计数应仅在一个组 (ID) 内。如果活动为 1,则计数列应重置为 0,然后重新开始计数。
所以,我有一个包含以下内容的数据框:
想要的是这个:
有人能帮我吗?
我们在这里使用了一个新的段“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
Run Code Online (Sandbox Code Playgroud)
数据输入
df=pd.DataFrame({'ID':list('AAAAABBBBBBCCCCC'),'Activeity':[0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0]})
Run Code Online (Sandbox Code Playgroud)
解释 :
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
Run Code Online (Sandbox Code Playgroud)
然后我们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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2544 次 |
最近记录: |