Сначала преобразовать значения в datetime:
df['Base_date'] = pd.to_datetime(df['Base_date'], format='%d/%m/%Y')
Используйте DataFrame.apply
с axis=1
для цикла в строках:
df['New_Date'] = df.apply(lambda x: x['Base_date'].replace(day=x['Day_to_replace']), axis=1)
Или преобразовать дату и время в месяц и обратно для первого дня и сложить дневные временные значения с вычитанием 1
на to_timedelta
:
df['New_Date'] = (df['Base_date'].dt.to_period('m').dt.to_timestamp() +
pd.to_timedelta(df['Day_to_replace'].sub(1), unit='d'))
Или преобразовать значения в строки, добавить дни и преобразовать в datetime:
df['New_Date'] = pd.to_datetime(df['Base_date'].dt.strftime('%Y-%m-') +
df['Day_to_replace'].astype(str))
print (df)
ID Code Day_to_replace Base_date New_Date
0 123 403 28 2013-02-22 2013-02-28
1 456 402 21 2011-03-22 2011-03-21
2 789 401 14 2017-05-01 2017-05-14