@@ -1242,3 +1242,82 @@ def f():
1242
1242
def f ():
1243
1243
household .join (log_return , how = 'outer' )
1244
1244
self .assertRaises (NotImplementedError , f )
1245
+
1246
+
1247
+ class TestMergeOnIndexes (object ):
1248
+
1249
+ def test_merge_on_indexes (self ):
1250
+ df1 = pd .DataFrame ({'a' : [20 , 10 , 0 ]}, index = [2 , 1 , 0 ])
1251
+ df2 = pd .DataFrame ({'b' : [100 , 200 , 300 ]}, index = [1 , 2 , 3 ])
1252
+
1253
+ # default how='inner'
1254
+ result = pd .merge (df1 , df2 , left_index = True , right_index = True )
1255
+ expected = pd .DataFrame ({'a' : [20 , 10 ], 'b' : [200 , 100 ]},
1256
+ index = [2 , 1 ])
1257
+ tm .assert_frame_equal (result , expected )
1258
+
1259
+ # how='left'
1260
+ result = pd .merge (df1 , df2 , left_index = True , right_index = True , how = 'left' )
1261
+ expected = pd .DataFrame ({'a' : [20 , 10 , 0 ], 'b' : [200 , 100 , np .nan ]},
1262
+ index = [2 , 1 , 0 ])
1263
+ tm .assert_frame_equal (result , expected )
1264
+
1265
+ # how='right'
1266
+ result = pd .merge (df1 , df2 , left_index = True , right_index = True , how = 'right' )
1267
+ expected = pd .DataFrame ({'a' : [10 , 20 , np .nan ], 'b' : [100 , 200 , 300 ]},
1268
+ index = [1 , 2 , 3 ])
1269
+ tm .assert_frame_equal (result , expected )
1270
+
1271
+ # how='inner'
1272
+ result = pd .merge (df1 , df2 , left_index = True , right_index = True , how = 'inner' )
1273
+ expected = pd .DataFrame ({'a' : [20 , 10 ], 'b' : [200 , 100 ]},
1274
+ index = [2 , 1 ])
1275
+ tm .assert_frame_equal (result , expected )
1276
+
1277
+ # how='outer'
1278
+ result = pd .merge (df1 , df2 , left_index = True , right_index = True , how = 'outer' )
1279
+ expected = pd .DataFrame ({'a' : [0 , 10 , 20 , np .nan ],
1280
+ 'b' : [np .nan , 100 , 200 , 300 ]},
1281
+ index = [0 , 1 , 2 , 3 ])
1282
+ tm .assert_frame_equal (result , expected )
1283
+
1284
+ def test_merge_on_indexes_sort (self ):
1285
+ df1 = pd .DataFrame ({'a' : [20 , 10 , 0 ]}, index = [2 , 1 , 0 ])
1286
+ df2 = pd .DataFrame ({'b' : [100 , 200 , 300 ]}, index = [1 , 2 , 3 ])
1287
+
1288
+ # default how='inner'
1289
+ result = pd .merge (df1 , df2 , left_index = True , right_index = True , sort = True )
1290
+ expected = pd .DataFrame ({'a' : [10 , 20 ], 'b' : [100 , 200 ]},
1291
+ index = [1 , 2 ])
1292
+ tm .assert_frame_equal (result , expected )
1293
+
1294
+ # how='left'
1295
+ result = pd .merge (df1 , df2 , left_index = True , right_index = True , how = 'left' , sort = True )
1296
+ expected = pd .DataFrame ({'a' : [0 , 10 , 20 ], 'b' : [np .nan , 100 , 200 ]},
1297
+ index = [0 , 1 , 2 ])
1298
+ tm .assert_frame_equal (result , expected )
1299
+
1300
+ # how='right' (already sorted)
1301
+ result = pd .merge (df1 , df2 , left_index = True , right_index = True , how = 'right' , sort = True )
1302
+ expected = pd .DataFrame ({'a' : [10 , 20 , np .nan ], 'b' : [100 , 200 , 300 ]},
1303
+ index = [1 , 2 , 3 ])
1304
+ tm .assert_frame_equal (result , expected )
1305
+
1306
+ # how='right'
1307
+ result = pd .merge (df2 , df1 , left_index = True , right_index = True , how = 'right' , sort = True )
1308
+ expected = pd .DataFrame ([[np .nan , 0 ], [100 , 10 ], [200 , 20 ]],
1309
+ columns = ['b' , 'a' ], index = [0 , 1 , 2 ])
1310
+ tm .assert_frame_equal (result , expected )
1311
+
1312
+ # how='inner'
1313
+ result = pd .merge (df1 , df2 , left_index = True , right_index = True , how = 'inner' , sort = True )
1314
+ expected = pd .DataFrame ({'a' : [10 , 20 ], 'b' : [100 , 200 ]},
1315
+ index = [1 , 2 ])
1316
+ tm .assert_frame_equal (result , expected )
1317
+
1318
+ # how='outer'
1319
+ result = pd .merge (df1 , df2 , left_index = True , right_index = True , how = 'outer' , sort = True )
1320
+ expected = pd .DataFrame ({'a' : [0 , 10 , 20 , np .nan ],
1321
+ 'b' : [np .nan , 100 , 200 , 300 ]},
1322
+ index = [0 , 1 , 2 , 3 ])
1323
+ tm .assert_frame_equal (result , expected )
0 commit comments