如何在已有列的基础上增加新列

2024-06-01 14:49:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的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

我想在现有列的基础上添加一个新列

我想按id1id2分组,然后根据日期排序,然后将下一个组的日期指定给上一个组,但正如您看到的,数据有重复

     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

Tags: 数据dataframedate排序nan基础nextentry
1条回答
网友
1楼 · 发布于 2024-06-01 14:49:59

我认为需要:

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

相关问题 更多 >