Я начал с фрейма данных следующим образом:
In [24]: df = pd.DataFrame(
...: {'date1': ['10/02/2012', '10/02/2012', 'NA/NA/2014', 'NA/NA/2014', '01/02/2014'],
...: 'date2': ['10-Nov', '19-Oct', '26-Nov', '23-Oct', '14-Oct'],
...: 'date3': ['30/06/2011', '30/06/2011', '30/06/2013', '30/06/2013', 'NA']})
...:
In [25]: df
Out[25]:
date1 date2 date3
0 10/02/2012 10-Nov 30/06/2011
1 10/02/2012 19-Oct 30/06/2011
2 NA/NA/2014 26-Nov 30/06/2013
3 NA/NA/2014 23-Oct 30/06/2013
4 01/02/2014 14-Oct NA
Мне удалось преобразовать даты в объекты datetime.Поэтому у меня есть следующий фрейм данных:
In [26]: df["date1"] = pd.to_datetime(df["date1"], errors="coerce", dayfirst=True, infer_datetime_format=True)
...: df["date3"] = pd.to_datetime(df["date3"], errors="coerce", dayfirst=True, infer_datetime_format=True)
...: df["date2"] = pd.to_datetime(df["date2"], errors="coerce", dayfirst=True, format="%d-%b")
...: df
...:
Out[26]:
date1 date2 date3
0 2012-02-10 1900-11-10 2011-06-30
1 2012-02-10 1900-10-19 2011-06-30
2 NaT 1900-11-26 2013-06-30
3 NaT 1900-10-23 2013-06-30
4 2014-01-02 1900-10-14 NaT
Поскольку date2
не имеет кодировки year
, установите все значения year
равными 1900
.
Однако мне нужен первыйдата в date2
, которая была достигнута ПОСЛЕ date3
, и связанная с ней дата-время year
.
ТАКЖЕ ПРИМЕЧАНИЕ:
Когда date3
равно NaT
Мне нужно оглянуться назад от date1
, чтобы заполнитьгод date2
.Это можно увидеть в df.iloc[4,:]
Поэтому я хочу, чтобы выходной дата-кадр был:
date1 date2 date3
0 2012-02-10 2011-11-10 2011-06-30
1 2012-02-10 2011-10-19 2011-06-30
2 NaT 2013-11-26 2013-06-30
3 NaT 2013-10-23 2013-06-30
4 2014-01-02 2013-10-14 NaT
Это сложнее, чем просто использование date3.year
, потому что иногда date3
задерживается вгод (например, 30/12/2013
-> 2013-12-30
) и, таким образом, date2
будет первой датой в следующем году (т.е. 14-Oct
-> 1900-10-14
-> 2014-10-14
).
Более того, когда это возвращает nan
, мне нужно, чтобы дата и время были достаточно устойчивыми, чтобы возвращать NaT.
Поэтому мне нужно найти следующее year
ПОСЛЕ date3
, которое соответствует day-month
в date2
,Или, если этого не хватает, мне нужен year
ПЕРЕД date1
, который соответствует day-month
в date2
.