У меня есть следующие df
,
inv_date inv_id
2017-10-01 100117
2018-04-02 040218
2018-05-06 060518
, где inv_date
имеет значение datetime
dtype
, а inv_id
равно str
; Я хочу конвертировать inv_id
в datetime
, основываясь на следующих formats
,
formats = {'%m%d%y': 6, '%d%m%y': 6}
L = [pd.to_datetime(s.str[:v], format=k, errors='coerce') for k, v in formats.items()]
df1 = pd.concat(L, axis=1, keys=[s.name + '_' + str(i) for i, s in zip(count(), L)])
df1 = df.apply(lambda x: x.where(x.between('2000-01-01', datetime.now())))
Я хочу создать логический столбец dummy_inv_id
, для которого установлено значение True
, если какой-либо из не-NaT преобразованных datetime
находится в пределах +/- 180 дней от inv_date
,
df1 = df1.assign(inv_date=df['inv_date'])
df1['inv_id_1'].between(df1['inv_date'] - Timedelta(180, unit='d'), df1['inv_date'] + Timedelta(180, unit='d'))
df1['inv_id_2'].between(df1['inv_date'] - Timedelta(180, unit='d'), df1['inv_date'] + Timedelta(180, unit='d'))
Мне интересно, как рассматривать все столбцы даты и времени (inv_id_1
и inv_id_2
) в df1
вместе, поэтому, если кто-то находится между inv_date +/- 180 days
, тогда присвойте true
df
для соответствующей даты-времени;
так что результаты df
выглядят как
inv_date inv_id dummy_inv_id
2017-10-01 100117 true
2018-04-02 040218 true
2018-05-06 060518 true