在python pandas中用下一行的Start_date填充End_date列

时间:2019-05-09 12:19:47

标签: python pandas

我有一个如下数据框(尺寸缓慢变化)。我想用键列标识的特定组的下一行start_dt填充end_dt列。

Key start_dt   end_dt
1   25-05-2019 NA
1   30-06-2019 NA
1   15-07-2019 NA
2   17-07-2019 NA
2   15-07-2019 NA

我希望如下所示为end_dt填充数据。

Key start_dt   end_dt
1   25-05-2019 30-06-2019
1   30-06-2019 15-07-2019
1   15-07-2019 NA
2   17-07-2019 NA
2   15-07-2019 17-07-2019

我尝试的方法如下。在对start_dt进行升序排序后,我已经为每个从2开始的键组生成了一个序列。然后使用start_dt和相同的键列创建一个新的数据框,然后根据start_dt对它们进行排序,然后为键组创建一个从1开始的序列。

然后将这两个数据帧与sequ​​ence列连接在一起。请提供最佳解决方案。

df.sort_values(['start_dt'],ascending=[True],inplace=True)
df['seq'] = df.groupby(['key']).cumcount() + 2

temp= pd.DataFrame(df)
temp.sort_values(['start_dt'],ascending=[True],inplace=True)
temp=temp.rename(columns = {'start_dt':'end_dt'})
temp['seq'] = temp.groupby(['key']).cumcount() + 1

df = pd.merge(df, temp[['key','seq','end_dt']],how='left', on=['key','seq'])

1 个答案:

答案 0 :(得分:2)

似乎您首先需要同时Keystart_dt同时sort_values,然后才能使用GroupByshift来分配以下{ {1}}:

start_dt