Панды, как рассчитать дельту только с учетом месяца и дня - PullRequest
1 голос
/ 17 июня 2019

У меня есть следующие df,

doc_date    date_string
2019-06-03  WW0306
2019-06-07  EH0706

doc_date имеет datetime64 с форматом year-month-day;date_string имеет строку dtype в формате day/month или month/day, если удалены нецифровые символы;

df['date_string'].str.replace(r'\D+', '')

Как преобразовать date_string в datetime64 и установить флаг *От 1017 * до true, если date_string находится в пределах +/- 180 дней от doc_date, не учитывая, что у него нет года и любого формата даты, в который он преобразован;

 df['within_180'] = df.apply(lambda x: x.between(x.doc_date -
                                          Timedelta(180, unit='d'),
                                          x.doc_date +
                                          Timedelta(180, unit='d')))

результатдолжно выглядеть,

doc_date    date_string    within_180
2019-06-03  WW0306         true
2019-06-07  EH0706         true

1 Ответ

2 голосов
/ 17 июня 2019

IIUC, вы преобразуете столбец date_string в datetime после replace и используете series.dt.dayofyear, чтобы получить доступ к дню года для обоих столбцов и сравнить с series.le():

s=pd.to_datetime(df['date_string'].str.replace(r'\D+', ''),format='%d%m')
#df.doc_date=pd.to_datetime(df.doc_date) convert to datetime if not already datetime
df['withith_180'] = (df.doc_date.dt.dayofyear-s.dt.dayofyear).le(180)

    doc_date date_string  withith_180
0 2019-06-03      WW0306         True
1 2019-06-07      EH0706         True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...