@@ -131,11 +131,13 @@ class MultiIndex(Index):
131
131
The unique labels for each level
132
132
codes : sequence of arrays
133
133
Integers for each level designating which label at each location
134
+
135
+ .. versionadded:: 0.24.0
134
136
labels : sequence of arrays
137
+ Integers for each level designating which label at each location
138
+
135
139
.. deprecated:: 0.24.0
136
140
Use ``codes`` instead
137
-
138
- Integers for each level designating which label at each location
139
141
sortorder : optional int
140
142
Level of sortedness (must be lexicographically sorted by that
141
143
level)
@@ -179,7 +181,6 @@ class MultiIndex(Index):
179
181
names
180
182
levels
181
183
codes
182
- labels
183
184
nlevels
184
185
levshape
185
186
@@ -190,7 +191,6 @@ class MultiIndex(Index):
190
191
from_product
191
192
set_levels
192
193
set_codes
193
- set_labels
194
194
to_frame
195
195
to_flat_index
196
196
is_lexsorted
@@ -972,7 +972,7 @@ def dropna(self, how='any'):
972
972
else :
973
973
raise ValueError ("invalid how option: {0}" .format (how ))
974
974
975
- new_codes = [label [~ indexer ] for label in self .codes ]
975
+ new_codes = [level_codes [~ indexer ] for level_codes in self .codes ]
976
976
return self .copy (codes = new_codes , deep = True )
977
977
978
978
def get_value (self , series , key ):
@@ -1113,15 +1113,15 @@ def format(self, space=2, sparsify=None, adjoin=True, names=False,
1113
1113
return []
1114
1114
1115
1115
stringified_levels = []
1116
- for lev , lab in zip (self .levels , self .codes ):
1116
+ for lev , level_codes in zip (self .levels , self .codes ):
1117
1117
na = na_rep if na_rep is not None else _get_na_rep (lev .dtype .type )
1118
1118
1119
1119
if len (lev ) > 0 :
1120
1120
1121
- formatted = lev .take (lab ).format (formatter = formatter )
1121
+ formatted = lev .take (level_codes ).format (formatter = formatter )
1122
1122
1123
1123
# we have some NA
1124
- mask = lab == - 1
1124
+ mask = level_codes == - 1
1125
1125
if mask .any ():
1126
1126
formatted = np .array (formatted , dtype = object )
1127
1127
formatted [mask ] = na
@@ -1131,7 +1131,7 @@ def format(self, space=2, sparsify=None, adjoin=True, names=False,
1131
1131
# weird all NA case
1132
1132
formatted = [pprint_thing (na if isna (x ) else x ,
1133
1133
escape_chars = ('\t ' , '\r ' , '\n ' ))
1134
- for x in algos .take_1d (lev ._values , lab )]
1134
+ for x in algos .take_1d (lev ._values , level_codes )]
1135
1135
stringified_levels .append (formatted )
1136
1136
1137
1137
result_levels = []
@@ -1649,11 +1649,11 @@ def __getitem__(self, key):
1649
1649
key = com .cast_scalar_indexer (key )
1650
1650
1651
1651
retval = []
1652
- for lev , lab in zip (self .levels , self .codes ):
1653
- if lab [key ] == - 1 :
1652
+ for lev , level_codes in zip (self .levels , self .codes ):
1653
+ if level_codes [key ] == - 1 :
1654
1654
retval .append (np .nan )
1655
1655
else :
1656
- retval .append (lev [lab [key ]])
1656
+ retval .append (lev [level_codes [key ]])
1657
1657
1658
1658
return tuple (retval )
1659
1659
else :
@@ -1901,7 +1901,7 @@ def reorder_levels(self, order):
1901
1901
def __getslice__ (self , i , j ):
1902
1902
return self .__getitem__ (slice (i , j ))
1903
1903
1904
- def _get_labels_for_sorting (self ):
1904
+ def _get_codes_for_sorting (self ):
1905
1905
"""
1906
1906
we categorizing our codes by using the
1907
1907
available categories (all, not just observed)
@@ -2726,26 +2726,26 @@ def equals(self, other):
2726
2726
return False
2727
2727
2728
2728
for i in range (self .nlevels ):
2729
- slabels = self .codes [i ]
2730
- slabels = slabels [ slabels != - 1 ]
2731
- svalues = algos .take_nd (np .asarray (self .levels [i ]._values ),
2732
- slabels , allow_fill = False )
2733
-
2734
- olabels = other .codes [i ]
2735
- olabels = olabels [ olabels != - 1 ]
2736
- ovalues = algos .take_nd (
2729
+ self_codes = self .codes [i ]
2730
+ self_codes = self_codes [ self_codes != - 1 ]
2731
+ self_values = algos .take_nd (np .asarray (self .levels [i ]._values ),
2732
+ self_codes , allow_fill = False )
2733
+
2734
+ other_codes = other .codes [i ]
2735
+ other_codes = other_codes [ other_codes != - 1 ]
2736
+ other_values = algos .take_nd (
2737
2737
np .asarray (other .levels [i ]._values ),
2738
- olabels , allow_fill = False )
2738
+ other_codes , allow_fill = False )
2739
2739
2740
2740
# since we use NaT both datetime64 and timedelta64
2741
2741
# we can have a situation where a level is typed say
2742
2742
# timedelta64 in self (IOW it has other values than NaT)
2743
2743
# but types datetime64 in other (where its all NaT)
2744
2744
# but these are equivalent
2745
- if len (svalues ) == 0 and len (ovalues ) == 0 :
2745
+ if len (self_values ) == 0 and len (other_values ) == 0 :
2746
2746
continue
2747
2747
2748
- if not array_equivalent (svalues , ovalues ):
2748
+ if not array_equivalent (self_values , other_values ):
2749
2749
return False
2750
2750
2751
2751
return True
@@ -2923,7 +2923,7 @@ def insert(self, loc, item):
2923
2923
if k not in level :
2924
2924
# have to insert into level
2925
2925
# must insert at end otherwise you have to recompute all the
2926
- # other labels
2926
+ # other codes
2927
2927
lev_loc = len (level )
2928
2928
level = level .insert (lev_loc , k )
2929
2929
else :
@@ -2961,13 +2961,13 @@ def isin(self, values, level=None):
2961
2961
else :
2962
2962
num = self ._get_level_number (level )
2963
2963
levs = self .levels [num ]
2964
- labs = self .codes [num ]
2964
+ level_codes = self .codes [num ]
2965
2965
2966
2966
sought_labels = levs .isin (values ).nonzero ()[0 ]
2967
2967
if levs .size == 0 :
2968
- return np .zeros (len (labs ), dtype = np .bool_ )
2968
+ return np .zeros (len (level_codes ), dtype = np .bool_ )
2969
2969
else :
2970
- return np .lib .arraysetops .in1d (labs , sought_labels )
2970
+ return np .lib .arraysetops .in1d (level_codes , sought_labels )
2971
2971
2972
2972
2973
2973
MultiIndex ._add_numeric_methods_disabled ()
0 commit comments