我有一个包含两列的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
有人知道如何实现期望的输出吗
您可以先对名称和日期进行排序,然后按名称分组并移动日期:
相关问题 更多 >
编程相关推荐