@@ -140,11 +140,13 @@ class MultiIndex(Index):
140140 The unique labels for each level
141141 codes : sequence of arrays
142142 Integers for each level designating which label at each location
143+
144+ .. versionadded:: 0.24.0
143145 labels : sequence of arrays
146+ Integers for each level designating which label at each location
147+
144148 .. deprecated:: 0.24.0
145149 Use ``codes`` instead
146-
147- Integers for each level designating which label at each location
148150 sortorder : optional int
149151 Level of sortedness (must be lexicographically sorted by that
150152 level)
@@ -188,7 +190,6 @@ class MultiIndex(Index):
188190 names
189191 levels
190192 codes
191- labels
192193 nlevels
193194 levshape
194195
@@ -199,7 +200,6 @@ class MultiIndex(Index):
199200 from_product
200201 set_levels
201202 set_codes
202- set_labels
203203 to_frame
204204 to_flat_index
205205 is_lexsorted
@@ -982,7 +982,7 @@ def dropna(self, how='any'):
982982 else :
983983 raise ValueError ("invalid how option: {0}" .format (how ))
984984
985- new_codes = [label [~ indexer ] for label in self .codes ]
985+ new_codes = [level_codes [~ indexer ] for level_codes in self .codes ]
986986 return self .copy (codes = new_codes , deep = True )
987987
988988 def get_value (self , series , key ):
@@ -1123,15 +1123,15 @@ def format(self, space=2, sparsify=None, adjoin=True, names=False,
11231123 return []
11241124
11251125 stringified_levels = []
1126- for lev , lab in zip (self .levels , self .codes ):
1126+ for lev , level_codes in zip (self .levels , self .codes ):
11271127 na = na_rep if na_rep is not None else _get_na_rep (lev .dtype .type )
11281128
11291129 if len (lev ) > 0 :
11301130
1131- formatted = lev .take (lab ).format (formatter = formatter )
1131+ formatted = lev .take (level_codes ).format (formatter = formatter )
11321132
11331133 # we have some NA
1134- mask = lab == - 1
1134+ mask = level_codes == - 1
11351135 if mask .any ():
11361136 formatted = np .array (formatted , dtype = object )
11371137 formatted [mask ] = na
@@ -1141,7 +1141,7 @@ def format(self, space=2, sparsify=None, adjoin=True, names=False,
11411141 # weird all NA case
11421142 formatted = [pprint_thing (na if isna (x ) else x ,
11431143 escape_chars = ('\t ' , '\r ' , '\n ' ))
1144- for x in algos .take_1d (lev ._values , lab )]
1144+ for x in algos .take_1d (lev ._values , level_codes )]
11451145 stringified_levels .append (formatted )
11461146
11471147 result_levels = []
@@ -1661,11 +1661,11 @@ def __getitem__(self, key):
16611661 key = com .cast_scalar_indexer (key )
16621662
16631663 retval = []
1664- for lev , lab in zip (self .levels , self .codes ):
1665- if lab [key ] == - 1 :
1664+ for lev , level_codes in zip (self .levels , self .codes ):
1665+ if level_codes [key ] == - 1 :
16661666 retval .append (np .nan )
16671667 else :
1668- retval .append (lev [lab [key ]])
1668+ retval .append (lev [level_codes [key ]])
16691669
16701670 return tuple (retval )
16711671 else :
@@ -1913,7 +1913,7 @@ def reorder_levels(self, order):
19131913 def __getslice__ (self , i , j ):
19141914 return self .__getitem__ (slice (i , j ))
19151915
1916- def _get_labels_for_sorting (self ):
1916+ def _get_codes_for_sorting (self ):
19171917 """
19181918 we categorizing our codes by using the
19191919 available categories (all, not just observed)
@@ -2739,26 +2739,26 @@ def equals(self, other):
27392739 return False
27402740
27412741 for i in range (self .nlevels ):
2742- slabels = self .codes [i ]
2743- slabels = slabels [ slabels != - 1 ]
2744- svalues = algos .take_nd (np .asarray (self .levels [i ]._values ),
2745- slabels , allow_fill = False )
2746-
2747- olabels = other .codes [i ]
2748- olabels = olabels [ olabels != - 1 ]
2749- ovalues = algos .take_nd (
2742+ self_codes = self .codes [i ]
2743+ self_codes = self_codes [ self_codes != - 1 ]
2744+ self_values = algos .take_nd (np .asarray (self .levels [i ]._values ),
2745+ self_codes , allow_fill = False )
2746+
2747+ other_codes = other .codes [i ]
2748+ other_codes = other_codes [ other_codes != - 1 ]
2749+ other_values = algos .take_nd (
27502750 np .asarray (other .levels [i ]._values ),
2751- olabels , allow_fill = False )
2751+ other_codes , allow_fill = False )
27522752
27532753 # since we use NaT both datetime64 and timedelta64
27542754 # we can have a situation where a level is typed say
27552755 # timedelta64 in self (IOW it has other values than NaT)
27562756 # but types datetime64 in other (where its all NaT)
27572757 # but these are equivalent
2758- if len (svalues ) == 0 and len (ovalues ) == 0 :
2758+ if len (self_values ) == 0 and len (other_values ) == 0 :
27592759 continue
27602760
2761- if not array_equivalent (svalues , ovalues ):
2761+ if not array_equivalent (self_values , other_values ):
27622762 return False
27632763
27642764 return True
@@ -2936,7 +2936,7 @@ def insert(self, loc, item):
29362936 if k not in level :
29372937 # have to insert into level
29382938 # must insert at end otherwise you have to recompute all the
2939- # other labels
2939+ # other codes
29402940 lev_loc = len (level )
29412941 level = level .insert (lev_loc , k )
29422942 else :
@@ -2974,13 +2974,13 @@ def isin(self, values, level=None):
29742974 else :
29752975 num = self ._get_level_number (level )
29762976 levs = self .levels [num ]
2977- labs = self .codes [num ]
2977+ level_codes = self .codes [num ]
29782978
29792979 sought_labels = levs .isin (values ).nonzero ()[0 ]
29802980 if levs .size == 0 :
2981- return np .zeros (len (labs ), dtype = np .bool_ )
2981+ return np .zeros (len (level_codes ), dtype = np .bool_ )
29822982 else :
2983- return np .lib .arraysetops .in1d (labs , sought_labels )
2983+ return np .lib .arraysetops .in1d (level_codes , sought_labels )
29842984
29852985
29862986MultiIndex ._add_numeric_methods_disabled ()
0 commit comments