Вы можете векторизовать это с помощью pd.to_timedelta
:
# pd.to_timedelta(df.index, unit='d') + pd.to_datetime('15-2-2019') # whichever
pd.to_timedelta(df.a, unit='d') + pd.to_datetime('15-2-2019')
0 2019-02-25
1 2019-02-26
2 2019-02-27
3 2019-02-28
4 2019-03-01
5 2019-03-02
6 2019-03-03
7 2019-03-04
8 2019-03-05
9 2019-03-06
Name: a, dtype: datetime64[ns]
df['date_from_counter'] = (
pd.to_timedelta(df.a, unit='d') + pd.to_datetime('15-2-2019'))
df
a counter date_from_counter
0 10 0 2019-02-25
1 11 1 2019-02-26
2 12 2 2019-02-27
3 13 3 2019-02-28
4 14 4 2019-03-01
5 15 5 2019-03-02
6 16 6 2019-03-03
7 17 7 2019-03-04
8 18 8 2019-03-05
9 19 9 2019-03-06
Как и ожидалось, вы можете вызвать pd.to_timedelta
для любого столбца целых чисел с нужной единицей, а затем использовать результирующий столбец Timedelta
для арифметики даты и времени.
Чтобы ваш код работал, похоже, вам нужно было передать int
, а не np.int
(не знаю почему). Это работает.
dt = pd.to_datetime('15-2-2019')
df['date from counter'] = df.apply(
lambda x: dt + pd.DateOffset(days=x['counter'].item()), axis=1)
df
a counter date from counter
0 10 0 2019-02-15
1 11 1 2019-02-16
2 12 2 2019-02-17
3 13 3 2019-02-18
4 14 4 2019-02-19
5 15 5 2019-02-20
6 16 6 2019-02-21
7 17 7 2019-02-22
8 18 8 2019-02-23
9 19 9 2019-02-24