Как применить cumcount к двум столбцам? - PullRequest
1 голос
/ 18 октября 2019

У меня есть датафрейм с ИМЯ и ДАТА. Я хочу создать столбец подсчета, который будет увеличиваться, только если дата отличается. См. Третий столбец ниже:

Name    Date          COLUMN I NEED
----    ----          -------------
Bob     11-01-2019          1
Bob     11-01-2019          1
Bob     11-20-2019          2
Mike    12-01-2019          1
Mike    12-02-2019          2
Mike    12-03-2019          3
Steve   01-01-2019          1
Steve   01-01-2019          1

Я пытался использовать:

df['COLUMN RESULT'] = df.groupby(['Name'])['Date'].cumsum() + 1

Name    Date          COLUMN RESULT
----    ----          -------------
Bob     11-01-2019          1
Bob     11-01-2019          2
Bob     11-20-2019          3
Mike    12-01-2019          1
Mike    12-02-2019          2
Mike    12-03-2019          3
Steve   01-01-2019          1
Steve   01-01-2019          2

Но он будет увеличиваться независимо от того, какая это дата. Спасибо за помощь, я ценю это!

Ответы [ 2 ]

4 голосов
/ 18 октября 2019

Использование

df['result'] = df.Date.ne(df.Date.shift()).groupby(df.Name).cumsum().astype(int)

    Name        Date  result
0    Bob  11-01-2019       1
1    Bob  11-01-2019       1
2    Bob  11-20-2019       2
3   Mike  12-01-2019       1
4   Mike  12-02-2019       2
5   Mike  12-03-2019       3
6  Steve  01-01-2019       1
7  Steve  01-01-2019       1
0 голосов
/ 18 октября 2019

с использованием groupby apply и shift

df['result'] = df.groupby('Name')['Date'].apply(lambda x : x.ne(x.shift()).cumsum())
print(df)
     Name     Date  given_output result
0    Bob 2019-11-01      1       1
1    Bob 2019-11-01      1       1
2    Bob 2019-11-20      2       2
3   Mike 2019-12-01      1       1
4   Mike 2019-12-02      2       2
5   Mike 2019-12-03      3       3
6  Steve 2019-01-01      1       1
7  Steve 2019-01-01      1       1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...