Как добавить новый столбец на основе существующих столбцов

У меня 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

Не могли бы вы подробнее узнать о then asign date of next group to previous group?

jezrael 10.09.2018 09:12

после группировки я хочу отсортировать по дате, а затем назначить дату следующей группы предыдущей группе. я имею в виду, что в новом столбце дата следующей группы должна быть скопирована во все строки предыдущих групп 'id1' и 'id2'

Muhammad Waleed 10.09.2018 09:16
1
2
55
1

Ответы 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

удалит ли он дубликаты из исходных данных, потому что я не хочу удалять дубликаты

Muhammad Waleed 10.09.2018 09:26

а как насчет сортировки по Entry_date после группировки

Muhammad Waleed 10.09.2018 09:28

@MuhammadWaleed - Не уверен, если понимаете, что будет выводиться, если заменить 55111095502 на 55111095501?

jezrael 10.09.2018 09:33

Другие вопросы по теме