Groupby和cumcount仅适用于有效行

时间:2018-11-09 22:11:55

标签: 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    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

1 个答案:

答案 0 :(得分:1)

使用groupbycumcount

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