Python Groupby和cumcount仅适用于有效行
我有一个如下所示的数据帧:Python Groupby和cumcount仅适用于有效行,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,Pandas Groupby,我有一个如下所示的数据帧: 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
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
使用
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
输入中的“valid”是整数,但输出中的“valid”是布尔值?这是如何工作的?@coldspeed我将列乘以1以从true False转换为true False,这并不能解释第2行中1*1=False的原因。进行编辑以更正错误我的问题是,如果所有行都大于0,怎么可能出现任何错误值?