Как продвинуть строки фрейма данных Pandas до следующего значения?

#python #pandas #datetime

#python #pandas #дата и время

Вопрос:

Мой фрейм данных Pandas содержит столбец несортированных дат в виде строк, структурированных как ‘20201029’ и так далее. четвертый. Для каждой ячейки я хотел бы перенести дату на следующую доступную дату. Смотрите Следующее:

 import pandas as pd


df1 = pd.DataFrame(data={'label' : ['asc', 'vas', 'fe3', 'aa2', 'g4s', 'zzs', '44s', '2ab'], 
                        'original date'  : ['20200701', '20200701', '20200704', '20200709', '20200710', '20200710', '20200712', '20200714']})

# dates variable for sake of clarity, currently unused
dates = df1['original date'].drop_duplicates()

df2 = pd.DataFrame(data={'label' : ['asc', 'vas', 'fe3', 'aa2', 'g4s', 'zzs', '44s', '2ab'], 
                        'original date'  : ['20200701', '20200701', '20200704', '20200709', '20200710', '20200710', '20200712', '20200714'], 
                        'new date' : ['20200704', '20200704', '20200709', '20200710', '20200712', '20200712', '20200714', '']})
  

Как вы можете видеть, каждая исходная дата сравнивается со списком дат и переносится на следующую дату. 20200701 становится 20200704, потому что это следующая дата в ряду.

Я видел пользовательские диапазоны частот в функции рабочих дней pandas. Однако это решение не кажется идеальным, поскольку мои даты непредсказуемы и неустойчивы.

Ответ №1:

Используйте map :

 df1['new date'] = df1['original date'].map(pd.Series(dates.values, 
                                                     dates.shift().values)
                                          )
  

Вывод:

   label original date  new date
0   asc      20200701  20200704
1   vas      20200701  20200704
2   fe3      20200704  20200709
3   aa2      20200709  20200710
4   g4s      20200710  20200712
5   zzs      20200710  20200712
6   44s      20200712  20200714
7   2ab      20200714       NaN