Вы можете использовать Series.dt.floor
и объединить его с left_on
:
a = df1.index.floor('d')
df_merge=pd.merge(df1,df2, how='outer', left_on=a, right_index=True)
print (df_merge)
key_0 col1 col2 col3 col4 col5
datetime
2018-03-01 10:00:00 2018-03-01 1.0 2.0 3.0 10 20
2018-03-01 11:00:00 2018-03-01 1.0 2.0 3.0 10 20
2018-03-01 12:00:00 2018-03-01 1.0 2.0 3.0 10 20
2018-03-01 12:00:00 2018-03-02 NaN NaN NaN 10 20
2018-03-01 12:00:00 2018-03-03 NaN NaN NaN 10 20
При необходимости удалить столбец, заполненный датами:
a = df1.index.floor('d')
df_merge=pd.merge(df1,df2, how='outer', left_on=a, right_index=True).drop('key_0', 1)
print (df_merge)
col1 col2 col3 col4 col5
datetime
2018-03-01 10:00:00 1.0 2.0 3.0 10 20
2018-03-01 11:00:00 1.0 2.0 3.0 10 20
2018-03-01 12:00:00 1.0 2.0 3.0 10 20
2018-03-01 12:00:00 NaN NaN NaN 10 20
2018-03-01 12:00:00 NaN NaN NaN 10 20
Также кажется, что здесь необходимо левое соединение:
a = df1.index.floor('d')
df_merge=pd.merge(df1,df2, how='left', left_on=a, right_index=True)
print (df_merge)
col1 col2 col3 col4 col5
datetime
2018-03-01 10:00:00 1 2 3 10 20
2018-03-01 11:00:00 1 2 3 10 20
2018-03-01 12:00:00 1 2 3 10 20