У меня есть pandas фрейм данных с двумя столбцами: Name
, date
Я попытался создать новый столбец date_last
для сохранения до последней даты для каждой строки.
Пример ввода:
Name date
John 2020-05-04
John 2019-12-10
John 2019-11-17
John 2019-08-12
John 2019-01-10
John 2019-01-07
Sam 2020-05-01
Sam 2020-04-15
Sam 2020-03-22
Требуемая мощность:
Name date date_last
John 2020-05-04 2019-12-10
John 2019-12-10 2019-11-17
John 2019-11-17 2019-08-12
John 2019-08-12 2019-01-10
John 2019-01-10 2019-01-07
John 2019-01-07 None
Sam 2020-05-01 2020-04-15
Sam 2020-04-15 2020-03-22
Sam 2020-03-22 None
Моя пробная версия:
df = pd.DataFrame({
'Name':['John', 'John','John','John','John','John','Sam','Sam','Sam'],
'date':['2020-05-04', '2019-12-10', '2019-11-17', '2019-08-12', '2019-01-10', '2019-01-07', '2020-05-01', '2020-04-15','2020-03-22']})
df['date'] = pd.to_datetime(df['date'])
df['dateRank'] = df.groupby('Name').rank('dense')
df = df.merge(df, on = ['Name'], how = 'outer')
df = df[df['dateRank_x'] - df['dateRank_y'] == 1]
df = df[['Name', 'date_x', 'date_y']].rename(columns={'date_x':'date', 'date_y':'date_last'})
df
Мой вывод:
Name date date_last
1 John 2020-05-04 2019-12-10
8 John 2019-12-10 2019-11-17
15 John 2019-11-17 2019-08-12
22 John 2019-08-12 2019-01-10
29 John 2019-01-10 2019-01-07
37 Sam 2020-05-01 2020-04-15
41 Sam 2020-04-15 2020-03-22
Кто-нибудь знает, как добиться желаемого результата?