Skip to content

Commit 3c200fe

Browse files
Albert Villanova del Moraljreback
Albert Villanova del Moral
authored andcommitted
Add new tests
1 parent ef2581e commit 3c200fe

File tree

2 files changed

+164
-0
lines changed

2 files changed

+164
-0
lines changed

pandas/tests/frame/test_merge.py

+86
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

+78
Original file line numberDiff line numberDiff line change
@@ -1355,3 +1355,81 @@ def test_dtype_on_merged_different(self, change, how, left, right):
13551355
np.dtype('int64')],
13561356
index=['X', 'Y', 'Z'])
13571357
assert_series_equal(result, expected)
1358+
1359+
class TestMergeOnIndexes(object):
1360+
1361+
def test_merge_on_indexes(self):
1362+
df1 = pd.DataFrame({'a': [20, 10, 0]}, index=[2, 1, 0])
1363+
df2 = pd.DataFrame({'b': [100, 200, 300]}, index=[1, 2, 3])
1364+
1365+
# default how='inner'
1366+
result = pd.merge(df1, df2, left_index=True, right_index=True)
1367+
expected = pd.DataFrame({'a': [20, 10], 'b': [200, 100]},
1368+
index=[2, 1])
1369+
tm.assert_frame_equal(result, expected)
1370+
1371+
# how='left'
1372+
result = pd.merge(df1, df2, left_index=True, right_index=True, how='left')
1373+
expected = pd.DataFrame({'a': [20, 10, 0], 'b': [200, 100, np.nan]},
1374+
index=[2, 1, 0])
1375+
tm.assert_frame_equal(result, expected)
1376+
1377+
# how='right'
1378+
result = pd.merge(df1, df2, left_index=True, right_index=True, how='right')
1379+
expected = pd.DataFrame({'a': [10, 20, np.nan], 'b': [100, 200, 300]},
1380+
index=[1, 2, 3])
1381+
tm.assert_frame_equal(result, expected)
1382+
1383+
# how='inner'
1384+
result = pd.merge(df1, df2, left_index=True, right_index=True, how='inner')
1385+
expected = pd.DataFrame({'a': [20, 10], 'b': [200, 100]},
1386+
index=[2, 1])
1387+
tm.assert_frame_equal(result, expected)
1388+
1389+
# how='outer'
1390+
result = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
1391+
expected = pd.DataFrame({'a': [0, 10, 20, np.nan],
1392+
'b': [np.nan, 100, 200, 300]},
1393+
index=[0, 1, 2, 3])
1394+
tm.assert_frame_equal(result, expected)
1395+
1396+
def test_merge_on_indexes_sort(self):
1397+
df1 = pd.DataFrame({'a': [20, 10, 0]}, index=[2, 1, 0])
1398+
df2 = pd.DataFrame({'b': [100, 200, 300]}, index=[1, 2, 3])
1399+
1400+
# default how='inner'
1401+
result = pd.merge(df1, df2, left_index=True, right_index=True, sort=True)
1402+
expected = pd.DataFrame({'a': [10, 20], 'b': [100, 200]},
1403+
index=[1, 2])
1404+
tm.assert_frame_equal(result, expected)
1405+
1406+
# how='left'
1407+
result = pd.merge(df1, df2, left_index=True, right_index=True, how='left', sort=True)
1408+
expected = pd.DataFrame({'a': [0, 10, 20], 'b': [np.nan, 100, 200]},
1409+
index=[0, 1, 2])
1410+
tm.assert_frame_equal(result, expected)
1411+
1412+
# how='right' (already sorted)
1413+
result = pd.merge(df1, df2, left_index=True, right_index=True, how='right', sort=True)
1414+
expected = pd.DataFrame({'a': [10, 20, np.nan], 'b': [100, 200, 300]},
1415+
index=[1, 2, 3])
1416+
tm.assert_frame_equal(result, expected)
1417+
1418+
# how='right'
1419+
result = pd.merge(df2, df1, left_index=True, right_index=True, how='right', sort=True)
1420+
expected = pd.DataFrame([[np.nan, 0], [100, 10], [200, 20]],
1421+
columns=['b', 'a'], index=[0, 1, 2])
1422+
tm.assert_frame_equal(result, expected)
1423+
1424+
# how='inner'
1425+
result = pd.merge(df1, df2, left_index=True, right_index=True, how='inner', sort=True)
1426+
expected = pd.DataFrame({'a': [10, 20], 'b': [100, 200]},
1427+
index=[1, 2])
1428+
tm.assert_frame_equal(result, expected)
1429+
1430+
# how='outer'
1431+
result = pd.merge(df1, df2, left_index=True, right_index=True, how='outer', sort=True)
1432+
expected = pd.DataFrame({'a': [0, 10, 20, np.nan],
1433+
'b': [np.nan, 100, 200, 300]},
1434+
index=[0, 1, 2, 3])
1435+
tm.assert_frame_equal(result, expected)

0 commit comments

Comments
 (0)