File tree Expand file tree Collapse file tree 1 file changed +7
-10
lines changed Expand file tree Collapse file tree 1 file changed +7
-10
lines changed Original file line number Diff line number Diff 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 :
You can’t perform that action at this time.
0 commit comments