У меня есть два столбца:
date age
0 2016-01-05 47.0
1 2016-01-05 43.0
2 2016-01-05 28.0
3 2016-01-05 46.0
4 2016-01-04 39.0
Мне нужен еще один столбец с разницей между датой и возрастом:
date age dob
0 2016-01-05 47.0 1969-01-05
1 2016-01-05 43.0 1973-01-05
2 2016-01-05 28.0 1988-01-05
3 2016-01-05 46.0 1970-01-05
4 2016-01-04 39.0 1977-01-04
Кажется достаточно простым, но простым df['date'] - df['age'].astype('timedelta64[Y]')
дает:
0 1969-01-04 14:27:36
1 1973-01-04 13:44:24
2 1988-01-05 05:02:24
3 1970-01-04 20:16:48
4 1977-01-03 13:01:12
Зачем нужна дополнительная отметка времени? Даже pd.to_timedelta(df['age'], unit='Y')
дает тот же результат с дополнительным предупреждением о том, что unit='Y'
устарело.
Далее, df['date'] - pd.DateOffset(years=df['age'])
бросает (понятно):
TypeError: cannot convert the series to <class 'int'>
Я могу использовать apply
во втором варианте, df['date'] - df['age'].apply(lambda a: pd.DateOffset(years=a))
, чтобы получить правильный результат, и (по понятным причинам) PerformanceWarning: Adding/subtracting array of DateOffsets to DatetimeArray not vectorized
.
Какое здесь хорошее (питоническое и векторизованное) решение?