我有一个如下所示的数据框:
ids valid date
0 1 False 2012-06-10
1 1 True 2012-07-11
2 1 True 2012-09-20
3 2 False 2012-01-12
4 2 True 2012-07-11
5 3 True 2012-03-09
6 3 True 2012-07-11
7 3 False 2012-12-09
8 4 False 2012-07-11
我想计算此人到目前为止有多少个有效案例,并以升序排列。
ids valid date occur
1 False 2012-06-10 0
1 True 2012-07-11 1
1 True 2012-09-20 2
2 False 2012-01-12 0
2 True 2012-07-11 1
3 True 2012-03-09 1
3 True 2012-07-11 2
3 False 2012-12-09 0
4 False 2012-07-11 0
到目前为止,我已经尝试过:
df = df.sort_values(['id', 'date'])
df['occur'] = df.groupby('valid').cumcount()+1
答案 0 :(得分:1)
使用groupby
和cumcount
:
df['occur'] = (df.groupby(['ids', 'valid'])
.cumcount()
.add(1)
.where(df.valid, 0))
print(df)
ids valid date occur
0 1 False 2012-06-10 0
1 1 True 2012-07-11 1
2 1 True 2012-09-20 2
3 2 False 2012-01-12 0
4 2 True 2012-07-11 1
5 3 True 2012-03-09 1
6 3 True 2012-07-11 2
7 3 False 2012-12-09 0
8 4 False 2012-07-11 0