Skip to content

Commit 1c0cc62

Browse files
authored
REF: get .items out of BlockManager.apply (#33616)
1 parent ad8ce0b commit 1c0cc62

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

pandas/core/generic.py

+5
Original file line numberDiff line numberDiff line change
@@ -8665,6 +8665,11 @@ def _where(
86658665
else:
86668666
align = self._get_axis_number(axis) == 1
86678667

8668+
if align and isinstance(other, NDFrame):
8669+
other = other.reindex(self._info_axis, axis=self._info_axis_number)
8670+
if isinstance(cond, NDFrame):
8671+
cond = cond.reindex(self._info_axis, axis=self._info_axis_number)
8672+
86688673
block_axis = self._get_block_manager_axis(axis)
86698674

86708675
if inplace:

pandas/core/internals/managers.py

+7-9
Original file line numberDiff line numberDiff line change
@@ -373,23 +373,20 @@ def apply(self: T, f, align_keys=None, **kwargs) -> T:
373373

374374
self._consolidate_inplace()
375375

376-
align_copy = False
377-
if f == "where":
378-
align_copy = True
379-
380376
aligned_args = {k: kwargs[k] for k in align_keys}
381377

382378
for b in self.blocks:
383379

384380
if aligned_args:
385-
b_items = self.items[b.mgr_locs.indexer]
386381

387382
for k, obj in aligned_args.items():
388383
if isinstance(obj, (ABCSeries, ABCDataFrame)):
389-
axis = obj._info_axis_number
390-
kwargs[k] = obj.reindex(
391-
b_items, axis=axis, copy=align_copy
392-
)._values
384+
# The caller is responsible for ensuring that
385+
# obj.axes[-1].equals(self.items)
386+
if obj.ndim == 1:
387+
kwargs[k] = obj.iloc[b.mgr_locs.indexer]._values
388+
else:
389+
kwargs[k] = obj.iloc[:, b.mgr_locs.indexer]._values
393390
else:
394391
# otherwise we have an ndarray
395392
kwargs[k] = obj[b.mgr_locs.indexer]
@@ -1125,6 +1122,7 @@ def insert(self, loc: int, item: Label, value, allow_duplicates: bool = False):
11251122
new_axis = self.items.insert(loc, item)
11261123

11271124
if value.ndim == self.ndim - 1 and not is_extension_array_dtype(value.dtype):
1125+
# TODO(EA2D): special case not needed with 2D EAs
11281126
value = _safe_reshape(value, (1,) + value.shape)
11291127

11301128
block = make_block(values=value, ndim=self.ndim, placement=slice(loc, loc + 1))

0 commit comments

Comments
 (0)