Skip to content

Commit 6315d07

Browse files
committed
REF: Avoid duplication in reset_index() when reinsering index columns
1 parent 075eca1 commit 6315d07

File tree

1 file changed

+25
-35
lines changed

1 file changed

+25
-35
lines changed

pandas/core/frame.py

+25-35
Original file line numberDiff line numberDiff line change
@@ -3020,43 +3020,33 @@ def _maybe_casted_values(index, labels=None):
30203020
new_index = self.index.droplevel(level)
30213021

30223022
if not drop:
3023-
names = self.index.names
3024-
zipped = lzip(self.index.levels, self.index.labels)
3025-
3026-
multi_col = isinstance(self.columns, MultiIndex)
3027-
for i, (lev, lab) in reversed(list(enumerate(zipped))):
3028-
col_name = names[i]
3029-
if col_name is None:
3030-
col_name = 'level_%d' % i
3031-
3032-
if multi_col:
3033-
if col_fill is None:
3034-
col_name = tuple([col_name] * self.columns.nlevels)
3035-
else:
3036-
name_lst = [col_fill] * self.columns.nlevels
3037-
lev_num = self.columns._get_level_number(col_level)
3038-
name_lst[lev_num] = col_name
3039-
col_name = tuple(name_lst)
3040-
3041-
# to ndarray and maybe infer different dtype
3042-
level_values = _maybe_casted_values(lev, lab)
3043-
if level is None or i in level:
3044-
new_obj.insert(0, col_name, level_values)
3023+
names = [n if n is not None else ('level_%d' % i)
3024+
for (i, n) in enumerate(self.index.names)]
3025+
to_insert = lzip(self.index.levels, self.index.labels)
30453026

30463027
elif not drop:
3047-
name = self.index.name
3048-
if name is None or name == 'index':
3049-
name = 'index' if 'index' not in self else 'level_0'
3050-
if isinstance(self.columns, MultiIndex):
3051-
if col_fill is None:
3052-
name = tuple([name] * self.columns.nlevels)
3053-
else:
3054-
name_lst = [col_fill] * self.columns.nlevels
3055-
lev_num = self.columns._get_level_number(col_level)
3056-
name_lst[lev_num] = name
3057-
name = tuple(name_lst)
3058-
values = _maybe_casted_values(self.index)
3059-
new_obj.insert(0, name, values)
3028+
default = 'index' if 'index' not in self else 'level_0'
3029+
names = [default] if self.index.name is None else [self.index.name]
3030+
to_insert = ((self.index, None),)
3031+
3032+
if not drop:
3033+
multi_col = isinstance(self.columns, MultiIndex)
3034+
for i, (lev, lab) in reversed(list(enumerate(to_insert))):
3035+
col_name = names[i]
3036+
3037+
if multi_col:
3038+
if col_fill is None:
3039+
col_name = tuple([col_name] * self.columns.nlevels)
3040+
else:
3041+
name_lst = [col_fill] * self.columns.nlevels
3042+
lev_num = self.columns._get_level_number(col_level)
3043+
name_lst[lev_num] = col_name
3044+
col_name = tuple(name_lst)
3045+
3046+
# to ndarray and maybe infer different dtype
3047+
level_values = _maybe_casted_values(lev, lab)
3048+
if level is None or i in level:
3049+
new_obj.insert(0, col_name, level_values)
30603050

30613051
new_obj.index = new_index
30623052
if not inplace:

0 commit comments

Comments
 (0)