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

时间:2017-07-18 19:02:10

标签: python pandas dataframe merge

我想要与datehours列合并两个不同的DataFrame。我看到了一些threads,但我无法找到解决问题的方法。我还阅读了this文档并尝试了不同的组合,但是效果不佳。

我的两个不同DataFrames的示例

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   

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 

正如您在两个数据框架中看到的那样,DF209:00:00开头,我希望加入DF1 09:00:00,这基本上是匹配日期和时间。到目前为止,我尝试了许多不同的组合使用以前的线程和上面提到的文档。一个例子,

merged_df = DF2.merge(DF1, how = 'left', on = ['date', 'hours'])

这为右NAN DataFrame引入了right个值。我知道,我不必同时使用datehours列,但仍然会得到相同的结果。我这样快速尝试了R,这非常合适。

merged_df  <- left_join(DF1, DF2, by = 'date')

pandas中是否仍然只使用匹配值合并DatFrames而不获取NaN值?

1 个答案:

答案 0 :(得分:9)

how='inner'中使用pd.merge

merged_df = DF2.merge(DF1, how = 'inner', on = ['date', 'hours'])

这将执行&#34;内部加入&#34;从而省略了每个数据帧中不匹配的行。因此,合并数据帧的右侧或左侧没有NaN。