Groupby и cumcount только для допустимых строк - PullRequest
0 голосов
/ 10 ноября 2018

у меня датафрейм выглядит так:

    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 голосов
/ 10 ноября 2018

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...