Skip to content

Commit 047b513

Browse files
Albert Villanova del Moraljreback
Albert Villanova del Moral
authored andcommitted
Address requested changes
1 parent ec836bd commit 047b513

File tree

2 files changed

+47
-25
lines changed

2 files changed

+47
-25
lines changed

pandas/core/frame.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -4465,13 +4465,15 @@ def join(self, other, on=None, how='left', lsuffix='', rsuffix='',
44654465
* outer: form union of calling frame's index (or column if on is
44664466
specified) with other frame's index, and sort it
44674467
* inner: form intersection of calling frame's index (or column if
4468-
on is specified) with other frame's index
4468+
on is specified) with other frame's index, preserving the
4469+
order of the calling's one
44694470
lsuffix : string
44704471
Suffix to use from left frame's overlapping columns
44714472
rsuffix : string
44724473
Suffix to use from right frame's overlapping columns
44734474
sort : boolean, default False
4474-
Order result DataFrame lexicographically by the join key
4475+
Order result DataFrame lexicographically by the join key. If False,
4476+
the order of the join key depends on the join type (how keyword)
44754477
44764478
Notes
44774479
-----

pandas/tests/frame/test_join.py

+43-23
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,39 @@
77
from pandas.tests.frame.common import TestData
88

99
import pandas.util.testing as tm
10-
from pandas.util.testing import (assertRaisesRegexp,
11-
assert_frame_equal)
1210

1311

14-
class TestDataFrameJoin(tm.TestCase, TestData):
12+
class TestDataFrameJoin(TestData):
1513

1614
def test_join(self):
1715
df1 = pd.DataFrame({'a': [20, 10, 0]}, index=[2, 1, 0])
1816
df2 = pd.DataFrame({'b': [100, 200, 300]}, index=[1, 2, 3])
1917

18+
result = df1.join(df2)
19+
expected = pd.DataFrame({'a': [20, 10, 0], 'b': [200, 100, None]},
20+
index=[2, 1, 0])
21+
tm.assert_frame_equal(result, expected)
22+
23+
result = df1.join(df2, how='left')
24+
expected = pd.DataFrame({'a': [20, 10, 0], 'b': [200, 100, None]},
25+
index=[2, 1, 0])
26+
tm.assert_frame_equal(result, expected)
27+
28+
result = df1.join(df2, how='right')
29+
expected = pd.DataFrame({'a': [10, 20, None], 'b': [100, 200, 300]},
30+
index=[1, 2, 3])
31+
tm.assert_frame_equal(result, expected)
32+
2033
result = df1.join(df2, how='inner')
21-
expected = pd.DataFrame({'a': [20, 10], 'b': [200, 100]}, index=[2, 1])
22-
self.assert_frame_equal(result, expected)
34+
expected = pd.DataFrame({'a': [20, 10], 'b': [200, 100]},
35+
index=[2, 1])
36+
tm.assert_frame_equal(result, expected)
37+
38+
result = df1.join(df2, how='outer')
39+
expected = pd.DataFrame({'a': [0, 10, 20, None],
40+
'b': [None, 100, 200, 300]},
41+
index=[0, 1, 2, 3])
42+
tm.assert_frame_equal(result, expected)
2343

2444
def test_join_index(self):
2545
# left / right
@@ -28,35 +48,35 @@ def test_join_index(self):
2848
f2 = self.frame.loc[self.frame.index[5:], ['C', 'D']].iloc[::-1]
2949

3050
joined = f.join(f2)
31-
self.assert_index_equal(f.index, joined.index)
51+
tm.assert_index_equal(f.index, joined.index)
3252
expected_columns = pd.Index(['A', 'B', 'C', 'D'])
33-
self.assert_index_equal(joined.columns, expected_columns)
53+
tm.assert_index_equal(joined.columns, expected_columns)
3454

3555
joined = f.join(f2, how='left')
36-
self.assert_index_equal(joined.index, f.index)
37-
self.assert_index_equal(joined.columns, expected_columns)
56+
tm.assert_index_equal(joined.index, f.index)
57+
tm.assert_index_equal(joined.columns, expected_columns)
3858

3959
joined = f.join(f2, how='right')
40-
self.assert_index_equal(joined.index, f2.index)
41-
self.assert_index_equal(joined.columns, expected_columns)
60+
tm.assert_index_equal(joined.index, f2.index)
61+
tm.assert_index_equal(joined.columns, expected_columns)
4262

4363
# inner
4464

4565
joined = f.join(f2, how='inner')
46-
self.assert_index_equal(joined.index, f.index[5:10])
47-
self.assert_index_equal(joined.columns, expected_columns)
66+
tm.assert_index_equal(joined.index, f.index[5:10])
67+
tm.assert_index_equal(joined.columns, expected_columns)
4868

4969
# outer
5070

5171
joined = f.join(f2, how='outer')
52-
self.assert_index_equal(joined.index, self.frame.index.sort_values())
53-
self.assert_index_equal(joined.columns, expected_columns)
72+
tm.assert_index_equal(joined.index, self.frame.index.sort_values())
73+
tm.assert_index_equal(joined.columns, expected_columns)
5474

55-
assertRaisesRegexp(ValueError, 'join method', f.join, f2, how='foo')
75+
tm.assertRaisesRegexp(ValueError, 'join method', f.join, f2, how='foo')
5676

5777
# corner case - overlapping columns
5878
for how in ('outer', 'left', 'inner'):
59-
with assertRaisesRegexp(ValueError, 'columns overlap but '
79+
with tm.assertRaisesRegexp(ValueError, 'columns overlap but '
6080
'no suffix'):
6181
self.frame.join(self.frame, how=how)
6282

@@ -69,24 +89,24 @@ def test_join_index_more(self):
6989
expected['D'] = self.frame['D'][::2]
7090

7191
result = af.join(bf)
72-
assert_frame_equal(result, expected)
92+
tm.assert_frame_equal(result, expected)
7393

7494
result = af.join(bf, how='right')
75-
assert_frame_equal(result, expected[::2])
95+
tm.assert_frame_equal(result, expected[::2])
7696

7797
result = bf.join(af, how='right')
78-
assert_frame_equal(result, expected.loc[:, result.columns])
98+
tm.assert_frame_equal(result, expected.loc[:, result.columns])
7999

80100
def test_join_index_series(self):
81101
df = self.frame.copy()
82102
s = df.pop(self.frame.columns[-1])
83103
joined = df.join(s)
84104

85105
# TODO should this check_names ?
86-
assert_frame_equal(joined, self.frame, check_names=False)
106+
tm.assert_frame_equal(joined, self.frame, check_names=False)
87107

88108
s.name = None
89-
assertRaisesRegexp(ValueError, 'must have a name', df.join, s)
109+
tm.assertRaisesRegexp(ValueError, 'must have a name', df.join, s)
90110

91111
def test_join_overlap(self):
92112
df1 = self.frame.loc[:, ['A', 'B', 'C']]
@@ -100,4 +120,4 @@ def test_join_overlap(self):
100120
expected = df1_suf.join(df2_suf).join(no_overlap)
101121

102122
# column order not necessarily sorted
103-
assert_frame_equal(joined, expected.loc[:, joined.columns])
123+
tm.assert_frame_equal(joined, expected.loc[:, joined.columns])

0 commit comments

Comments
 (0)