Skip to content

Commit ca5a702

Browse files
committed
BUG: single-key DataFrame.join with list failed, GH #246
1 parent e823ec7 commit ca5a702

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

pandas/core/frame.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2223,11 +2223,14 @@ def _join_on(self, other, on, lsuffix, rsuffix):
22232223
return self
22242224

22252225
if isinstance(on, (list, tuple)):
2226-
join_key = zip(*[self[k] for k in on])
2227-
join_key = common._asarray_tuplesafe(join_key,
2228-
dtype=np.object_)
2226+
if len(on) == 1:
2227+
join_key = self[on[0]].values
2228+
else:
2229+
join_key = zip(*[self[k] for k in on])
2230+
join_key = common._asarray_tuplesafe(join_key,
2231+
dtype=np.object_)
22292232
else:
2230-
join_key = np.asarray(self[on])
2233+
join_key = self[on].values
22312234

22322235
new_data = self._data.join_on(other._data, join_key, axis=1,
22332236
lsuffix=lsuffix, rsuffix=rsuffix)

pandas/tests/test_frame.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2554,8 +2554,6 @@ def test_join_on(self):
25542554
# merge column not p resent
25552555
self.assertRaises(Exception, target.join, source, on='E')
25562556

2557-
# corner cases
2558-
25592557
# nothing to merge
25602558
merged = target.join(source.reindex([]), on='C')
25612559

@@ -2568,6 +2566,16 @@ def test_join_on(self):
25682566
self.assertRaises(Exception, target.join, source, on='C',
25692567
how='left')
25702568

2569+
def test_join_on_singlekey_list(self):
2570+
df = DataFrame({'key' : ['a', 'a', 'b', 'b', 'c']})
2571+
df2 = DataFrame({'value' : [0, 1, 2]}, index=['a', 'b', 'c'])
2572+
2573+
# corner cases
2574+
joined = df.join(df2, on=['key'])
2575+
expected = df.join(df2, on='key')
2576+
2577+
assert_frame_equal(joined, expected)
2578+
25712579
def test_join_on_multikey(self):
25722580
index = MultiIndex(levels=[['foo', 'bar', 'baz', 'qux'],
25732581
['one', 'two', 'three']],

pandas/util/testing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def isiterable(obj):
7070
def assert_almost_equal(a, b):
7171
if isinstance(a, dict) or isinstance(b, dict):
7272
return assert_dict_equal(a, b)
73-
73+
7474
if isinstance(a, basestring):
7575
assert a == b, (a, b)
7676
return True
@@ -116,9 +116,9 @@ def assert_dict_equal(a, b, compare_keys=True):
116116
assert_almost_equal(a[k], b[k])
117117

118118
def assert_series_equal(left, right):
119+
assert_almost_equal(left, right)
119120
assert(left.dtype == right.dtype)
120121
assert(left.index.equals(right.index))
121-
assert_almost_equal(left, right)
122122

123123
def assert_frame_equal(left, right):
124124
assert(isinstance(left, DataFrame))

0 commit comments

Comments
 (0)