Skip to content

Commit f44ce13

Browse files
authored
PERF: Use shallow copies/remove unnecessary copies in reshaping (#58959)
1 parent d604aa8 commit f44ce13

File tree

3 files changed

+9
-11
lines changed

3 files changed

+9
-11
lines changed

pandas/core/reshape/melt.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -202,9 +202,9 @@ def melt(
202202
if value_vars_was_not_none:
203203
frame = frame.iloc[:, algos.unique(idx)]
204204
else:
205-
frame = frame.copy()
205+
frame = frame.copy(deep=False)
206206
else:
207-
frame = frame.copy()
207+
frame = frame.copy(deep=False)
208208

209209
if col_level is not None: # allow list or other?
210210
# frame is a copy

pandas/core/reshape/pivot.py

+5-7
Original file line numberDiff line numberDiff line change
@@ -557,8 +557,6 @@ def _all_key(key):
557557
piece = piece.T
558558
all_key = _all_key(key)
559559

560-
# we are going to mutate this, so need to copy!
561-
piece = piece.copy()
562560
piece[all_key] = margin[key]
563561

564562
table_pieces.append(piece)
@@ -842,11 +840,11 @@ def pivot(
842840
# If columns is None we will create a MultiIndex level with None as name
843841
# which might cause duplicated names because None is the default for
844842
# level names
845-
data = data.copy(deep=False)
846-
data.index = data.index.copy()
847-
data.index.names = [
848-
name if name is not None else lib.no_default for name in data.index.names
849-
]
843+
if any(name is None for name in data.index.names):
844+
data = data.copy(deep=False)
845+
data.index.names = [
846+
name if name is not None else lib.no_default for name in data.index.names
847+
]
850848

851849
indexed: DataFrame | Series
852850
if values is lib.no_default:

pandas/core/reshape/reshape.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ def _unstack_multiple(
461461
)
462462

463463
if isinstance(data, Series):
464-
dummy = data.copy()
464+
dummy = data.copy(deep=False)
465465
dummy.index = dummy_index
466466

467467
unstacked = dummy.unstack("__placeholder__", fill_value=fill_value, sort=sort)
@@ -1025,7 +1025,7 @@ def stack_reshape(
10251025
buf = []
10261026
for idx in stack_cols.unique():
10271027
if len(frame.columns) == 1:
1028-
data = frame.copy()
1028+
data = frame.copy(deep=False)
10291029
else:
10301030
if not isinstance(frame.columns, MultiIndex) and not isinstance(idx, tuple):
10311031
# GH#57750 - if the frame is an Index with tuples, .loc below will fail

0 commit comments

Comments
 (0)