使用来自两个不同列的匹配值合并DataFrames - Pandas

i.n*_*n.m 5 python merge dataframe pandas

我有两个不同的DataFrame我要合并datehours列.我看到了一些线程,但我无法找到解决问题的方法.我也阅读了这份文件,尝试了不同的组合,然而,效果并不好.

我的两个不同DataFrame的示例,

DF1

        date    hours        var1            var2 
0   2013-07-10  00:00:00    150.322617  52.225920   
1   2013-07-10  01:00:00    155.250917  53.365296   
2   2013-07-10  02:00:00    124.918667  51.158249   
3   2013-07-10  03:00:00    143.839217  53.138251
 .....  
9   2013-09-10  09:00:00    148.135818  86.676341
10  2013-09-10  10:00:00    147.833517  53.658016   
11  2013-09-10  12:00:00    149.580233  69.745368   
12  2013-09-10  13:00:00    163.715317  14.524894   
13  2013-09-10  14:00:00    168.856650  10.762779   
Run Code Online (Sandbox Code Playgroud)

DF2

       date      hours      myvar1        myvar2 
0   2013-07-10  09:00:00    1.617         98.56 
1   2013-07-10  10:00:00    2.917         23.60 
2   2013-07-10  12:00:00    19.667        36.15 
3   2013-07-10  13:00:00    14.217        45.16
 .....  
20 2013-09-10   20:00:00    1.517         53.56 
21 2013-09-10   21:00:00    5.233         69.47
22 2013-09-10   22:00:00    13.717        14.25
23 2013-09-10   23:00:00    18.850        10.69 
Run Code Online (Sandbox Code Playgroud)

正如你在两个DataFrame中看到的那样,DF209:00:00和我想要加入的方式开始DF1 09:00:00,这基本上就是matchind的日期和时间.到目前为止,我尝试了许多不同的组合使用以前的线程和上面提到的文档.一个例子,

merged_df = DF2.merge(DF1, how = 'left', on = ['date', 'hours'])
Run Code Online (Sandbox Code Playgroud)

这是NAN为正确的rightDataFrame 引入的值.我知道,我不必使用两个datehours列,但仍然得到相同的结果.我这样试过R很快,效果很好.

merged_df  <- left_join(DF1, DF2, by = 'date')
Run Code Online (Sandbox Code Playgroud)

无论如何pandas将DatFrames与匹配值合并而不获取NaN值?

Sco*_*ton 9

使用how='inner'pd.merge:

merged_df = DF2.merge(DF1, how = 'inner', on = ['date', 'hours'])
Run Code Online (Sandbox Code Playgroud)

这将执行和"内部连接",从而省略每个数据帧中不匹配的行.因此,合并数据帧的右侧或左侧没有NaN.