Skip to content

Commit 1e68fd9

Browse files
author
Chang She
committed
BUG: missing case for assigning DataFrame via ix
1 parent 6455298 commit 1e68fd9

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

pandas/core/indexing.py

+9
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,15 @@ def _align_frame(self, indexer, df):
180180
val = df.reindex(idx, columns=cols).values
181181
return val
182182

183+
elif ((isinstance(indexer, slice) or com.is_list_like(indexer))
184+
and is_frame):
185+
ax = self.obj.index[indexer]
186+
if df.index.equals(ax):
187+
val = df.copy().values
188+
else:
189+
val = df.reindex(ax).values
190+
return val
191+
183192
elif np.isscalar(indexer) and not is_frame:
184193
idx = self.obj.axes[1]
185194
cols = self.obj.axes[2]

pandas/tests/test_frame.py

+20
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,26 @@ def test_ix_align(self):
726726
s = dft.ix[0, idx]
727727
assert_series_equal(s, b.reindex(s.index))
728728

729+
def test_ix_frame_align(self):
730+
b = DataFrame(np.random.randn(3, 4))
731+
df_orig = DataFrame(randn(10, 4))
732+
df = df_orig.copy()
733+
734+
df.ix[:3] = b
735+
out = b.ix[:3]
736+
assert_frame_equal(out, b)
737+
738+
b.sort_index(inplace=True)
739+
df = df_orig.copy()
740+
df.ix[[0, 1, 2]] = b
741+
out = df.ix[[0, 1, 2]].reindex(b.index)
742+
assert_frame_equal(out, b)
743+
744+
df = df_orig.copy()
745+
df.ix[:3] = b
746+
out = df.ix[:3]
747+
assert_frame_equal(out, b.reindex(out.index))
748+
729749
def test_getitem_setitem_non_ix_labels(self):
730750
df = tm.makeTimeDataFrame()
731751

0 commit comments

Comments
 (0)