2017-07-18 61 views
0

我有两个不同的DataFrame,我想合并datehours列。我看到有一些threads那里,但我找不到解决我的问题。我也读this文件,并尝试了不同的组合,但是,并不好。合并具有来自两个不同列的匹配值的DataFrames - Pandas

我的两个不同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 

正如你可以在两个DataFrames,DF2开始与09:00:00看到,我想用DF1加盟09:00:00,这基本上是matchind日期和倍。到目前为止,我使用前面的线程和上面提到的文档尝试了许多不同的组合。一个例子,

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

这引入了对右right数据帧NAN值。我知道,我不必同时使用datehours列,但是,仍然会得到相同的结果。我试过R就像这样,这很好。

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

反正在pandas合并DatFrames只是没有得到NaN值匹配的值?

+1

您的R代码和熊猫代码不匹配。无论哪种方式,请在小型DataFrame上显示输出(不正确和正确)。 – ayhan

回答

2

使用how='inner'pd.merge

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

这将执行与“内加入”从而省略在每个数据帧不匹配的行。因此,在合并的数据帧的右边或左边部分都没有NaN。

+0

检查你的所有dtypes他们很匹配的列...要么两个日期是字符串或日期时间和小时应该是字符串。 –

+0

@斯科特·波士顿现在都是'object'类型,我会将它们转换为'date_time'感谢您的建议 –

相关问题