Skip to content

Commit f41884e

Browse files
author
Albert Villanova del Moral
committed
Add new tests
1 parent b13e1fc commit f41884e

File tree

2 files changed

+165
-0
lines changed

2 files changed

+165
-0
lines changed

pandas/tests/frame/test_merge.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from __future__ import print_function
4+
5+
import numpy as np
6+
import pandas as pd
7+
import pandas.util.testing as tm
8+
9+
10+
class TestDataFrameMerge(object):
11+
12+
def test_merge_on_indexes(self):
13+
df1 = pd.DataFrame({'a': [20, 10, 0]}, index=[2, 1, 0])
14+
df2 = pd.DataFrame({'b': [100, 200, 300]}, index=[1, 2, 3])
15+
16+
# default how='inner'
17+
result = df1.merge(df2, left_index=True, right_index=True)
18+
expected = pd.DataFrame({'a': [20, 10], 'b': [200, 100]},
19+
index=[2, 1])
20+
tm.assert_frame_equal(result, expected)
21+
22+
# how='left'
23+
result = df1.merge(df2, left_index=True, right_index=True, how='left')
24+
expected = pd.DataFrame({'a': [20, 10, 0], 'b': [200, 100, np.nan]},
25+
index=[2, 1, 0])
26+
tm.assert_frame_equal(result, expected)
27+
28+
# how='right'
29+
result = df1.merge(df2, left_index=True, right_index=True, how='right')
30+
expected = pd.DataFrame({'a': [10, 20, np.nan], 'b': [100, 200, 300]},
31+
index=[1, 2, 3])
32+
tm.assert_frame_equal(result, expected)
33+
34+
# how='inner'
35+
result = df1.merge(df2, left_index=True, right_index=True, how='inner')
36+
expected = pd.DataFrame({'a': [20, 10], 'b': [200, 100]},
37+
index=[2, 1])
38+
tm.assert_frame_equal(result, expected)
39+
40+
# how='outer'
41+
result = df1.merge(df2, left_index=True, right_index=True, how='outer')
42+
expected = pd.DataFrame({'a': [0, 10, 20, np.nan],
43+
'b': [np.nan, 100, 200, 300]},
44+
index=[0, 1, 2, 3])
45+
tm.assert_frame_equal(result, expected)
46+
47+
def test_merge_on_indexes_sort(self):
48+
df1 = pd.DataFrame({'a': [20, 10, 0]}, index=[2, 1, 0])
49+
df2 = pd.DataFrame({'b': [100, 200, 300]}, index=[1, 2, 3])
50+
51+
# default how='inner'
52+
result = df1.merge(df2, left_index=True, right_index=True, sort=True)
53+
expected = pd.DataFrame({'a': [10, 20], 'b': [100, 200]},
54+
index=[1, 2])
55+
tm.assert_frame_equal(result, expected)
56+
57+
# how='left'
58+
result = df1.merge(df2, left_index=True, right_index=True, how='left', sort=True)
59+
expected = pd.DataFrame({'a': [0, 10, 20], 'b': [np.nan, 100, 200]},
60+
index=[0, 1, 2])
61+
tm.assert_frame_equal(result, expected)
62+
63+
# how='right' (already sorted)
64+
result = df1.merge(df2, left_index=True, right_index=True, how='right', sort=True)
65+
expected = pd.DataFrame({'a': [10, 20, np.nan], 'b': [100, 200, 300]},
66+
index=[1, 2, 3])
67+
tm.assert_frame_equal(result, expected)
68+
69+
# how='right'
70+
result = df2.merge(df1, left_index=True, right_index=True, how='right', sort=True)
71+
expected = pd.DataFrame([[np.nan, 0], [100, 10], [200, 20]],
72+
columns=['b', 'a'], index=[0, 1, 2])
73+
tm.assert_frame_equal(result, expected)
74+
75+
# how='inner'
76+
result = df1.merge(df2, left_index=True, right_index=True, how='inner', sort=True)
77+
expected = pd.DataFrame({'a': [10, 20], 'b': [100, 200]},
78+
index=[1, 2])
79+
tm.assert_frame_equal(result, expected)
80+
81+
# how='outer'
82+
result = df1.merge(df2, left_index=True, right_index=True, how='outer', sort=True)
83+
expected = pd.DataFrame({'a': [0, 10, 20, np.nan],
84+
'b': [np.nan, 100, 200, 300]},
85+
index=[0, 1, 2, 3])
86+
tm.assert_frame_equal(result, expected)

pandas/tests/tools/test_merge.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,3 +1242,82 @@ def f():
12421242
def f():
12431243
household.join(log_return, how='outer')
12441244
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

Comments
 (0)