Создаем фрейм с днями с помощью date_range
, сбрасывая время на 0 через параметр normalize
, затем копируем колонку date
в datefrom
. Потом создаем колонку datetill
как datefrom
+ 1 день - 1 секунда - это и будет 59:59. В конце заменяем первое в datefrom
и последнее в datetill
значения на дату/время из df.
df = pd.DataFrame({
'datefrom': ['01.01.2023 13:00'],
'datetill': ['01.03.2023 15:00']
}).astype({'datefrom': 'datetime64', 'datetill': 'datetime64'})
dfrom, dtill = df.at[0, 'datefrom'], df.at[0, 'datetill']
df1 = pd.DataFrame({'date': pd.date_range(dfrom, dtill, freq='D', normalize=True)}).assign(datefrom=lambda x: x['date'])
df1['datetill'] = df1.datefrom + pd.Timedelta(1, unit='d') - pd.Timedelta(1, unit='s')
df1.at[df1.iloc[0].name, 'datefrom'], df1.at[df1.iloc[-1].name, 'datetill'] = dfrom, dtill
print(df)
print(df1)
datefrom datetill
0 2023-01-01 13:00:00 2023-01-03 15:00:00
date datefrom datetill
0 2023-01-01 2023-01-01 13:00:00 2023-01-01 23:59:59
1 2023-01-02 2023-01-02 00:00:00 2023-01-02 23:59:59
2 2023-01-03 2023-01-03 00:00:00 2023-01-03 15:00:00