web-dev-qa-db-ja.com

2つの異なる列の一致する値を持つデータフレームをマージ-Pandas

dateおよびhours列とマージする2つの異なるデータフレームがあります。 threads はいくつかありましたが、問題の解決策が見つかりませんでした。私も this ドキュメントを読んで、さまざまな組み合わせを試しましたが、うまくいきませんでした。

私の2つの異なるデータフレームの例

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で始まり、DF109:00:00と結合したいと思います。これは基本的にmatchindの日付と時刻です。これまでのところ、以前のスレッドと上記のドキュメントを使用して、さまざまな組み合わせを試しました。例、

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

これにより、正しいNAN DataFrameのright値が導入されました。 date列とhours列の両方を使用する必要はありませんが、同じ結果が得られます。私はこのようにすばやくRを試しましたが、これは完全にうまく機能します。

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

とにかくpandas値を取得せずに、一致する値だけでDatFrameをマージするNaNはありますか?

7
i.n.n.m

使用する how='inner' in pd.merge

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

これにより、「内部結合」が実行され、一致しない各データフレームの行が省略されます。したがって、マージされたデータフレームの右側または左側にNaNはありません。

13
Scott Boston