Skip to content

Commit 9f80ad1

Browse files
author
cloudboat
committed
all changes without levels/codes operations
1 parent eb320fb commit 9f80ad1

File tree

1 file changed

+7
-10
lines changed

1 file changed

+7
-10
lines changed

pandas/core/indexes/multi.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2750,24 +2750,21 @@ def insert_level(
27502750
name = None
27512751

27522752
if not hasattr(value, "__iter__") or isinstance(value, str):
2753-
raise TypeError("value must be an array-like object")
2753+
raise ValueError("value must be an array-like object")
27542754

27552755
value = list(value)
27562756
if len(value) != len(self):
27572757
raise ValueError("Length of values must match length of index")
27582758

2759-
new_level = Index(value)
2760-
new_codes_for_level = new_level.get_indexer(value)
2759+
# 简洁可靠的实现
2760+
new_tuples = []
2761+
for i, tup in enumerate(self):
2762+
new_tuple = tup[:position] + (value[i],) + tup[position:]
2763+
new_tuples.append(new_tuple)
27612764

2762-
new_levels = self.levels[:position] + [new_level] + self.levels[position:]
2763-
new_codes = (
2764-
self.codes[:position] + [new_codes_for_level] + self.codes[position:]
2765-
)
27662765
new_names = self.names[:position] + [name] + self.names[position:]
27672766

2768-
return MultiIndex(
2769-
levels=new_levels, codes=new_codes, names=new_names, verify_integrity=False
2770-
)
2767+
return MultiIndex.from_tuples(new_tuples, names=new_names)
27712768

27722769
def _reorder_ilevels(self, order) -> MultiIndex:
27732770
if len(order) != self.nlevels:

0 commit comments

Comments
 (0)