Skip to content

Commit 540fafd

Browse files
committed
relaxed __setitem__ restriction on boolean indexing a frame on an equal sized frame
thus we now allow: df[df[:-1]<0] = 2 (essentially partial boolean indexing) all tests continue to pass (added new test to test partial boolean indexing, removed test requiring an equal indexed frame)
1 parent 804eaae commit 540fafd

File tree

2 files changed

+5
-6
lines changed

2 files changed

+5
-6
lines changed

pandas/core/frame.py

-5
Original file line numberDiff line numberDiff line change
@@ -1870,11 +1870,6 @@ def __setitem__(self, key, value):
18701870
# support boolean setting with DataFrame input, e.g.
18711871
# df[df > df2] = 0
18721872
if isinstance(key, DataFrame):
1873-
if not (key.index.equals(self.index) and
1874-
key.columns.equals(self.columns)):
1875-
raise PandasError('Can only index with like-indexed '
1876-
'DataFrame objects')
1877-
18781873
self._boolean_set(key, value)
18791874
elif isinstance(key, (np.ndarray, list)):
18801875
return self._set_item_multiple(key, value)

pandas/tests/test_frame.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,11 @@ def test_setitem_boolean(self):
284284
values[values == 5] = 0
285285
assert_almost_equal(df.values, values)
286286

287-
self.assertRaises(Exception, df.__setitem__, df[:-1] > 0, 2)
287+
# a df that needs alignment first
288+
df[df[:-1]<0] = 2
289+
np.putmask(values[:-1],values[:-1]<0,2)
290+
assert_almost_equal(df.values, values)
291+
288292
self.assertRaises(Exception, df.__setitem__, df * 0, 2)
289293

290294
# index with DataFrame

0 commit comments

Comments
 (0)