API: add "unique=" argument to MultiIndex.get_level_values() · pandas-dev/pandas@8a69543 (original) (raw)
`@@ -886,7 +886,7 @@ def _try_mi(k):
`
886
886
``
887
887
`raise InvalidIndexError(key)
`
888
888
``
889
``
`-
def _get_level_values(self, level):
`
``
889
`+
def _get_level_values(self, level, unique=False):
`
890
890
`"""
`
891
891
` Return vector of label values for requested level,
`
892
892
` equal to the length of the index
`
`@@ -896,20 +896,24 @@ def _get_level_values(self, level):
`
896
896
` Parameters
`
897
897
` ----------
`
898
898
` level : int level
`
``
899
`+
unique : bool
`
``
900
`+
if True, drop duplicated values
`
899
901
``
900
902
` Returns
`
901
903
` -------
`
902
904
` values : ndarray
`
903
905
` """
`
904
906
``
905
``
`-
unique = self.levels[level]
`
``
907
`+
values = self.levels[level]
`
906
908
`labels = self.labels[level]
`
907
``
`-
filled = algos.take_1d(unique._values, labels,
`
908
``
`-
fill_value=unique._na_value)
`
909
``
`-
values = unique._shallow_copy(filled)
`
``
909
`+
if unique:
`
``
910
`+
labels = np.unique(labels[labels != -1])
`
``
911
`+
filled = algos.take_1d(values._values, labels,
`
``
912
`+
fill_value=values._na_value)
`
``
913
`+
values = values._shallow_copy(filled)
`
910
914
`return values
`
911
915
``
912
``
`-
def get_level_values(self, level):
`
``
916
`+
def get_level_values(self, level, unique=False):
`
913
917
`"""
`
914
918
` Return vector of label values for requested level,
`
915
919
` equal to the length of the index.
`
`@@ -919,6 +923,10 @@ def get_level_values(self, level):
`
919
923
` level : int or str
`
920
924
``` level
is either the integer position of the level in the
```
921
925
` MultiIndex, or the name of the level.
`
``
926
`+
unique : bool
`
``
927
`+
if True, drop duplicated values
`
``
928
+
``
929
`+
.. versionadded:: 0.21.0
`
922
930
``
923
931
` Returns
`
924
932
` -------
`
`@@ -942,7 +950,7 @@ def get_level_values(self, level):
`
942
950
` Index(['d', 'e', 'f'], dtype='object', name='level_2')
`
943
951
` """
`
944
952
`level = self._get_level_number(level)
`
945
``
`-
values = self._get_level_values(level)
`
``
953
`+
values = self._get_level_values(level, unique=unique)
`
946
954
`return values
`
947
955
``
948
956
`def format(self, space=2, sparsify=None, adjoin=True, names=False,
`