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,

`