переменная приращения для каждой группы - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть следующие данные:

ID    Time
1     01-01-01
1     02-01-01
1     02-01-01
2     01-01-01

Я хотел бы начать с 0 и увеличивать по одному для каждого нового времени по идентификатору группы.Так что мне нужно получить что-то подобное

ID    Time       Result
1     01-01-01   0
1     02-01-01   1
1     02-01-01   1
2     01-01-01   0

Есть ли разумный способ сделать это в ближайшее время?(Обратите внимание, что это только для иллюстрации, реальные данные достаточно велики.)

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Ранг может использоваться здесь с одним предупреждением, с которого он начинает ранг с 1. Обработайте его, вычтя 1.

df['Result'] = df.groupby('ID').Time.rank('min').astype(int) - 1

    ID  Time        Rank
0   1   2001-01-01  0
1   1   2001-02-01  1
2   1   2001-02-01  1
3   2   2001-01-01  0
0 голосов
/ 27 февраля 2019

Вы можете использовать groupby с pd.factorize:

df['Result'] = df.groupby('ID')['Time'].transform(lambda x: pd.factorize(x)[0])
df

Выход:

   ID      Time  Result
0   1  01-01-01       0
1   1  02-01-01       1
2   1  02-01-01       1
3   2  01-01-01       0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...