@@ -140,11 +140,13 @@ class MultiIndex(Index):
140
140
The unique labels for each level
141
141
codes : sequence of arrays
142
142
Integers for each level designating which label at each location
143
+
144
+ .. versionadded:: 0.24.0
143
145
labels : sequence of arrays
146
+ Integers for each level designating which label at each location
147
+
144
148
.. deprecated:: 0.24.0
145
149
Use ``codes`` instead
146
-
147
- Integers for each level designating which label at each location
148
150
sortorder : optional int
149
151
Level of sortedness (must be lexicographically sorted by that
150
152
level)
@@ -188,7 +190,6 @@ class MultiIndex(Index):
188
190
names
189
191
levels
190
192
codes
191
- labels
192
193
nlevels
193
194
levshape
194
195
@@ -199,7 +200,6 @@ class MultiIndex(Index):
199
200
from_product
200
201
set_levels
201
202
set_codes
202
- set_labels
203
203
to_frame
204
204
to_flat_index
205
205
is_lexsorted
@@ -982,7 +982,7 @@ def dropna(self, how='any'):
982
982
else :
983
983
raise ValueError ("invalid how option: {0}" .format (how ))
984
984
985
- new_codes = [label [~ indexer ] for label in self .codes ]
985
+ new_codes = [level_codes [~ indexer ] for level_codes in self .codes ]
986
986
return self .copy (codes = new_codes , deep = True )
987
987
988
988
def get_value (self , series , key ):
@@ -1123,15 +1123,15 @@ def format(self, space=2, sparsify=None, adjoin=True, names=False,
1123
1123
return []
1124
1124
1125
1125
stringified_levels = []
1126
- for lev , lab in zip (self .levels , self .codes ):
1126
+ for lev , level_codes in zip (self .levels , self .codes ):
1127
1127
na = na_rep if na_rep is not None else _get_na_rep (lev .dtype .type )
1128
1128
1129
1129
if len (lev ) > 0 :
1130
1130
1131
- formatted = lev .take (lab ).format (formatter = formatter )
1131
+ formatted = lev .take (level_codes ).format (formatter = formatter )
1132
1132
1133
1133
# we have some NA
1134
- mask = lab == - 1
1134
+ mask = level_codes == - 1
1135
1135
if mask .any ():
1136
1136
formatted = np .array (formatted , dtype = object )
1137
1137
formatted [mask ] = na
@@ -1141,7 +1141,7 @@ def format(self, space=2, sparsify=None, adjoin=True, names=False,
1141
1141
# weird all NA case
1142
1142
formatted = [pprint_thing (na if isna (x ) else x ,
1143
1143
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 )]
1145
1145
stringified_levels .append (formatted )
1146
1146
1147
1147
result_levels = []
@@ -1661,11 +1661,11 @@ def __getitem__(self, key):
1661
1661
key = com .cast_scalar_indexer (key )
1662
1662
1663
1663
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 :
1666
1666
retval .append (np .nan )
1667
1667
else :
1668
- retval .append (lev [lab [key ]])
1668
+ retval .append (lev [level_codes [key ]])
1669
1669
1670
1670
return tuple (retval )
1671
1671
else :
@@ -1913,7 +1913,7 @@ def reorder_levels(self, order):
1913
1913
def __getslice__ (self , i , j ):
1914
1914
return self .__getitem__ (slice (i , j ))
1915
1915
1916
- def _get_labels_for_sorting (self ):
1916
+ def _get_codes_for_sorting (self ):
1917
1917
"""
1918
1918
we categorizing our codes by using the
1919
1919
available categories (all, not just observed)
@@ -2739,26 +2739,26 @@ def equals(self, other):
2739
2739
return False
2740
2740
2741
2741
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 (
2750
2750
np .asarray (other .levels [i ]._values ),
2751
- olabels , allow_fill = False )
2751
+ other_codes , allow_fill = False )
2752
2752
2753
2753
# since we use NaT both datetime64 and timedelta64
2754
2754
# we can have a situation where a level is typed say
2755
2755
# timedelta64 in self (IOW it has other values than NaT)
2756
2756
# but types datetime64 in other (where its all NaT)
2757
2757
# but these are equivalent
2758
- if len (svalues ) == 0 and len (ovalues ) == 0 :
2758
+ if len (self_values ) == 0 and len (other_values ) == 0 :
2759
2759
continue
2760
2760
2761
- if not array_equivalent (svalues , ovalues ):
2761
+ if not array_equivalent (self_values , other_values ):
2762
2762
return False
2763
2763
2764
2764
return True
@@ -2936,7 +2936,7 @@ def insert(self, loc, item):
2936
2936
if k not in level :
2937
2937
# have to insert into level
2938
2938
# must insert at end otherwise you have to recompute all the
2939
- # other labels
2939
+ # other codes
2940
2940
lev_loc = len (level )
2941
2941
level = level .insert (lev_loc , k )
2942
2942
else :
@@ -2974,13 +2974,13 @@ def isin(self, values, level=None):
2974
2974
else :
2975
2975
num = self ._get_level_number (level )
2976
2976
levs = self .levels [num ]
2977
- labs = self .codes [num ]
2977
+ level_codes = self .codes [num ]
2978
2978
2979
2979
sought_labels = levs .isin (values ).nonzero ()[0 ]
2980
2980
if levs .size == 0 :
2981
- return np .zeros (len (labs ), dtype = np .bool_ )
2981
+ return np .zeros (len (level_codes ), dtype = np .bool_ )
2982
2982
else :
2983
- return np .lib .arraysetops .in1d (labs , sought_labels )
2983
+ return np .lib .arraysetops .in1d (level_codes , sought_labels )
2984
2984
2985
2985
2986
2986
MultiIndex ._add_numeric_methods_disabled ()
0 commit comments