我有这样的dataframe
id1 id2 Entry_Date
0 5344265358 55111095504 2018-07-13 00:00:00
1 5344265358 55111095504 2018-07-13 00:00:00
2 5344265358 55111095501 2018-08-13 00:00:00
3 5344265358 55111095502 2018-07-14 00:00:00
4 5441440119 55111366675 2018-08-13 00:00:00
5 5441440119 55111366676 2018-08-20 00:00:00
6 5441440119 55111366677 2018-09-21 00:00:00
7 5441440119 55111366677 2018-09-21 00:00:00
我想在现有列的基础上添加新列
我想按id1
和id2
分组,然后根据日期排序,然后将下一组的日期分配给上一组,但是如您所见,数据具有重复性
id1 id2 Entry_Date Next_Date
0 5344265358 55111095504 2018-07-13 00:00:00 2018-07-14 00:00:00
1 5344265358 55111095504 2018-07-13 00:00:00 2018-07-14 00:00:00
2 5344265358 55111095501 2018-08-13 00:00:00 NAN
3 5344265358 55111095502 2018-07-14 00:00:00 2018-08-13 00:00:00
4 5441440119 55111366675 2018-08-13 00:00:00 2018-08-20 00:00:00
5 5441440119 55111366676 2018-08-20 00:00:00 2018-09-21 00:00:00
6 5441440119 55111366677 2018-09-21 00:00:00 NAN
7 5441440119 55111366677 2018-09-21 00:00:00 NAN
答案 0 :(得分:1)
我认为需要:
df['Entry_Date'] = pd.to_datetime(df['Entry_Date'])
df1 = (df.sort_values('Entry_Date')
.drop_duplicates(['id1','id2'])
.rename(columns={'Entry_Date':'Next_Date'}))
df1['Next_Date'] = df1['Next_Date'].shift(-1)
print (df1)
id1 id2 Next_Date
0 5344265358 55111095504 2018-07-14
3 5344265358 55111095502 2018-08-13
2 5344265358 55111095501 2018-08-13
4 5441440119 55111366675 2018-08-20
5 5441440119 55111366676 2018-09-21
6 5441440119 55111366677 NaT
df = df.merge(df1, on=['id1','id2'], how='left')
print (df)
id1 id2 Entry_Date Next_Date
0 5344265358 55111095504 2018-07-13 2018-07-14
1 5344265358 55111095504 2018-07-13 2018-07-14
2 5344265358 55111095501 2018-08-13 2018-08-13
3 5344265358 55111095502 2018-07-14 2018-08-13
4 5441440119 55111366675 2018-08-13 2018-08-20
5 5441440119 55111366676 2018-08-20 2018-09-21
6 5441440119 55111366677 2018-09-21 NaT
7 5441440119 55111366677 2018-09-21 NaT