Pandas 将小时索引数据框与日索引数据框合并,并使用日索引数据框中的相同值填充所有行

Pandas 将小时索引数据框与日索引数据框合并,并使用日索引数据框中的相同值填充所有行,pandas,dataframe,datetime,merge,Pandas,Dataframe,Datetime,Merge,我目前有两个数据帧,一个在hour上索引,另一个在上索引 天 df1 col1 col2 col3 datetime 2018-03-01 10:00 1 2 3 2018-03-01 11:00 1 2 3 2018-03-01 12:00 1 2 3 df2 col4 col5 dat

我目前有两个数据帧,一个在
hour
上索引,另一个在
上索引

df1
                      col1    col2   col3
datetime
2018-03-01 10:00       1        2      3
2018-03-01 11:00       1        2      3 
2018-03-01 12:00       1        2      3


df2
                col4      col5
datetime
2018-03-01       10        20 
2018-03-02       10        20 
2018-03-03       10        20
我想合并这两个数据帧,这样我就可以将
col4
col5
中的值添加到df1中,但要确保df1上的所有行都由来自df2的相应值填充,而不仅仅是每天一行

如果我这样做:

df_merge=pd.merge(df1,df2, how='outer', left_index=True, right_index=True)
我得到:

    df1
                      col1    col2   col3   col4   col5
datetime
2018-03-01 10:00       1        2      3     10      20
2018-03-01 11:00       1        2      3     NaN     NaN
2018-03-01 12:00       1        2      3     NaN     NaN...
有没有办法让我用
10
20
来填充
NaN
?因此,
2018-03-01
上的所有小时都应该用
col4
col5
的相同值填充

谢谢

您可以使用它并将其与左侧的
合并:

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
如有必要,请删除datetimes填充的列:

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