df['End'] - df['Start'] , , , :
def date_expander(dataframe: pd.DataFrame,
start_dt_colname: str,
end_dt_colname: str,
time_unit: str,
new_colname: str,
end_inclusive: bool) -> pd.DataFrame:
td = pd.Timedelta(1, time_unit)
dataframe['_dt_diff'] = dataframe[end_dt_colname] - dataframe[start_dt_colname]
max_diff = int((dataframe['_dt_diff'] / td).max())
df_diffs = pd.concat([pd.DataFrame({'_to_add': np.arange(0, dt_diff + end_inclusive) * td}).assign(_dt_diff=dt_diff * td)
for dt_diff in range(max_diff + 1)])
data_expanded = dataframe.merge(df_diffs, on='_dt_diff')
data_expanded[new_colname] = data_expanded[start_dt_colname] + data_expanded['_to_add']
data_expanded = data_expanded.drop(columns=[start_dt_colname, end_dt_colname, '_to_add', '_dt_diff'])
del dataframe['_dt_diff']
return data_expanded