2017-07-18 100 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'感謝您的建議 –

相關問題