Как выполнить операции в датафрейме для каждого уникального идентификатора? - PullRequest
1 голос
/ 21 сентября 2019

У меня есть кадр данных, который выглядит следующим образом:

[id  purchase_date]
[1   1-1-19       ]
[1   1-4-19       ]
[2   1-3-19       ]
[3   1-5-19       ]
[1   1-10-19      ]
[...              ]

Я хочу добавить столбец и применить условие, которое будет выполнять следующее: Для каждого идентификатора вычтите максимальную дату из сегодняшней даты.Это будет означать «неактивные дни».Результирующая таблица должна выглядеть следующим образом (обратите внимание, что 20 появляется 3 раза, поскольку пользователь 1 появляется 3 раза в этой таблице):

Сегодняшняя дата = 30 января 2019 (1-30-19)

[id  purchase_date   inactivity_days]
[1   1-1-19              20         ]  
[1   1-4-19              20         ]
[2   1-3-19              27         ]
[3   1-5-19              25         ]
[1   1-10-19             20         ]
[...                                ]

Как бы я сделал это в пандах?

1 Ответ

0 голосов
/ 21 сентября 2019

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

import pandas as pd

# Make sure that purchase date is a proper datetime column:
df['purchase_date'] = pd.to_datetime(df['purchase_date'])

# Define todays_date variable:
todays_date = pd.to_datetime("1-30-19")

# group by id, and transform the `purchase_date` column with an anonymous function
df['inactivity_days'] = df.groupby('id').purchase_date.transform(lambda x: (todays_date - x.max()).days)

In [7]: df                                                                                                                                                                                                         
Out[7]: 
   id purchase_date  inactivity_days
0   1    2019-01-01               20
1   1    2019-01-04               20
2   2    2019-01-03               27
3   3    2019-01-05               25
4   1    2019-01-10               20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...