Skip to content

Commit c2018c1

Browse files
Revert "ENH: Improve performance for df.__setitem__ with list-like indexers (#38148)" (#38208)
This reverts commit 2f41109.
1 parent 5b2e162 commit c2018c1

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

asv_bench/benchmarks/indexing.py

-8
Original file line numberDiff line numberDiff line change
@@ -358,14 +358,6 @@ def time_assign_with_setitem(self):
358358
for i in range(100):
359359
self.df[i] = np.random.randn(self.N)
360360

361-
def time_assign_list_like_with_setitem(self):
362-
np.random.seed(1234)
363-
self.df[list(range(100))] = np.random.randn(self.N, 100)
364-
365-
def time_assign_list_of_columns_concat(self):
366-
df = DataFrame(np.random.randn(self.N, 100))
367-
concat([self.df, df], axis=1)
368-
369361

370362
class ChainIndexing:
371363

doc/source/whatsnew/v1.1.5.rst

-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ Fixed regressions
2424
- Fixed regression in :meth:`DataFrame.groupby` aggregation with out-of-bounds datetime objects in an object-dtype column (:issue:`36003`)
2525
- Fixed regression in ``df.groupby(..).rolling(..)`` with the resulting :class:`MultiIndex` when grouping by a label that is in the index (:issue:`37641`)
2626
- Fixed regression in :meth:`DataFrame.fillna` not filling ``NaN`` after other operations such as :meth:`DataFrame.pivot` (:issue:`36495`).
27-
- Fixed performance regression for :meth:`DataFrame.__setitem__` with list-like indexers (:issue:`37954`)
2827
- Fixed performance regression in ``df.groupby(..).rolling(..)`` (:issue:`38038`)
2928
- Fixed regression in :meth:`MultiIndex.intersection` returning duplicates when at least one of the indexes had duplicates (:issue:`36915`)
3029

pandas/core/indexing.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -672,8 +672,17 @@ def _ensure_listlike_indexer(self, key, axis=None, value=None):
672672
and not com.is_bool_indexer(key)
673673
and all(is_hashable(k) for k in key)
674674
):
675-
keys = self.obj.columns.union(key, sort=False)
676-
self.obj._mgr = self.obj._mgr.reindex_axis(keys, 0)
675+
for i, k in enumerate(key):
676+
if k not in self.obj:
677+
if value is None:
678+
self.obj[k] = np.nan
679+
elif is_array_like(value) and value.ndim == 2:
680+
# GH#37964 have to select columnwise in case of array
681+
self.obj[k] = value[:, i]
682+
elif is_list_like(value):
683+
self.obj[k] = value[i]
684+
else:
685+
self.obj[k] = value
677686

678687
def __setitem__(self, key, value):
679688
if isinstance(key, tuple):

0 commit comments

Comments
 (0)