#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