class_docstr: pandas-on-Spark MultiIndex that corresponds to pandas MultiIndex logically. This might hold
  Spark Column internally.
  
  Parameters
  ----------
  levels : sequence of arrays
      The unique labels for each level.
  codes : sequence of arrays
      Integers for each level designating which label at each location.
  sortorder : optional int
      Level of sortedness (must be lexicographically sorted by that
      level).
  names : optional sequence of objects
      Names for each of the index levels. (name is accepted for compat).
  copy : bool, default False
      Copy the meta-data.
  verify_integrity : bool, default True
      Check that the levels/codes are consistent and valid.
  
  See Also
  --------
  MultiIndex.from_arrays  : Convert list of arrays to MultiIndex.
  MultiIndex.from_product : Create a MultiIndex from the cartesian product
                            of iterables.
  MultiIndex.from_tuples  : Convert list of tuples to a MultiIndex.
  MultiIndex.from_frame   : Make a MultiIndex from a DataFrame.
  Index : A single-level Index.
  
  Examples
  --------
  >>> ps.DataFrame({'a': ['a', 'b', 'c']}, index=[[1, 2, 3], [4, 5, 6]]).index  # doctest: +SKIP
  MultiIndex([(1, 4),
              (2, 5),
              (3, 6)],
             )
  
  >>> ps.DataFrame({'a': [1, 2, 3]}, index=[list('abc'), list('def')]).index  # doctest: +SKIP
  MultiIndex([('a', 'd'),
              ('b', 'e'),
              ('c', 'f')],
             )
class_docstr_tok: ["pandas-on-Spark","MultiIndex","that","corresponds","to","pandas","MultiIndex","logically",".","This","might","hold","Spark","Column","internally",".","Parameters","--","--","--","--","--","levels",":","sequence","of","arrays","The","unique","labels","for","each","level",".","codes",":","sequence","of","arrays","Integers","for","each","level","designating","which","label","at","each","location",".","sortorder",":","optional","int","Level","of","sortedness","(","must","be","lexicographically","sorted","by","that","level",")",".","names",":","optional","sequence","of","objects","Names","for","each","of","the","index","levels",".","(","name","is","accepted","for","compat",")",".","copy",":","bool",",","default","False","Copy","the","meta-data",".","verify_integrity",":","bool",",","default","True","Check","that","the","levels\/codes","are","consistent","and","valid",".","See","Also","--","--","--","--","MultiIndex.from_arrays",":","Convert","list","of","arrays","to","MultiIndex",".","MultiIndex.from_product",":","Create","a","MultiIndex","from","the","cartesian","product","of","iterables",".","MultiIndex.from_tuples",":","Convert","list","of","tuples","to","a","MultiIndex",".","MultiIndex.from_frame",":","Make","a","MultiIndex","from","a","DataFrame",".","Index",":","A","single-level","Index",".","Examples","--","--","--","--",">",">",">","ps.DataFrame","(","{","'","a","'",":","[","'","a","'",",","'","b","'",",","'","c","'","]","}",",","index=","[","[","1",",","2",",","3","]",",","[","4",",","5",",","6","]","]",")",".index","#","doctest",":","+SKIP","MultiIndex","(","[","(","1",",","4",")",",","(","2",",","5",")",",","(","3",",","6",")","]",",",")",">",">",">","ps.DataFrame","(","{","'","a","'",":","[","1",",","2",",","3","]","}",",","index=","[","list","(","'abc","'",")",",","list","(","'def","'",")","]",")",".index","#","doctest",":","+SKIP","MultiIndex","(","[","(","'","a","'",",","'d","'",")",",","(","'","b","'",",","'","e","'",")",",","(","'","c","'",",","'","f","'",")","]",",",")"]
docstr: Return MultiIndex with duplicate values removed.
  
  Parameters
  ----------
  keep : {'first', 'last', ``False``}, default 'first'
      Method to handle dropping duplicates:
      - 'first' : Drop duplicates except for the first occurrence.
      - 'last' : Drop duplicates except for the last occurrence.
      - ``False`` : Drop all duplicates.
  
  Returns
  -------
  deduplicated : MultiIndex
  
  See Also
  --------
  Series.drop_duplicates : Equivalent method on Series.
  DataFrame.drop_duplicates : Equivalent method on DataFrame.
  
  Examples
  --------
  Generate a MultiIndex with duplicate values.
  
  >>> arrays = [[1, 2, 3, 1, 2], ["red", "blue", "black", "red", "blue"]]
  >>> midx = ps.MultiIndex.from_arrays(arrays, names=("number", "color"))
  >>> midx
  MultiIndex([(1,   'red'),
              (2,  'blue'),
              (3, 'black'),
              (1,   'red'),
              (2,  'blue')],
             names=['number', 'color'])
  
  >>> midx.drop_duplicates()
  MultiIndex([(1,   'red'),
              (2,  'blue'),
              (3, 'black')],
             names=['number', 'color'])
  
  >>> midx.drop_duplicates(keep='first')
  MultiIndex([(1,   'red'),
              (2,  'blue'),
              (3, 'black')],
             names=['number', 'color'])
  
  >>> midx.drop_duplicates(keep='last')
  MultiIndex([(3, 'black'),
              (1,   'red'),
              (2,  'blue')],
             names=['number', 'color'])
  
  >>> midx.drop_duplicates(keep=False)
  MultiIndex([(3, 'black')],
             names=['number', 'color'])
docstr_tok: ["Return","MultiIndex","with","duplicate","values","removed",".","Parameters","--","--","--","--","--","keep",":","{","'first","'",",","'last","'",",","``","False","``","}",",","default","'first'","Method","to","handle","dropping","duplicates",":","-","'first","'",":","Drop","duplicates","except","for","the","first","occurrence",".","-","'last","'",":","Drop","duplicates","except","for","the","last","occurrence",".","-","``","False","``",":","Drop","all","duplicates",".","Returns","--","--","--","-","deduplicated",":","MultiIndex","See","Also","--","--","--","--","Series.drop_duplicates",":","Equivalent","method","on","Series",".","DataFrame.drop_duplicates",":","Equivalent","method","on","DataFrame",".","Examples","--","--","--","--","Generate","a","MultiIndex","with","duplicate","values",".",">",">",">","arrays","=","[","[","1",",","2",",","3",",","1",",","2","]",",","[","``","red","''",",","``","blue","''",",","``","black","''",",","``","red","''",",","``","blue","''","]","]",">",">",">","midx","=","ps.MultiIndex.from_arrays","(","arrays",",","names=","(","``","number","''",",","``","color","''",")",")",">",">",">","midx","MultiIndex","(","[","(","1",",","'red","'",")",",","(","2",",","'blue","'",")",",","(","3",",","'black","'",")",",","(","1",",","'red","'",")",",","(","2",",","'blue","'",")","]",",","names=","[","'number","'",",","'color","'","]",")",">",">",">","midx.drop_duplicates","(",")","MultiIndex","(","[","(","1",",","'red","'",")",",","(","2",",","'blue","'",")",",","(","3",",","'black","'",")","]",",","names=","[","'number","'",",","'color","'","]",")",">",">",">","midx.drop_duplicates","(","keep='first","'",")","MultiIndex","(","[","(","1",",","'red","'",")",",","(","2",",","'blue","'",")",",","(","3",",","'black","'",")","]",",","names=","[","'number","'",",","'color","'","]",")",">",">",">","midx.drop_duplicates","(","keep='last","'",")","MultiIndex","(","[","(","3",",","'black","'",")",",","(","1",",","'red","'",")",",","(","2",",","'blue","'",")","]",",","names=","[","'number","'",",","'color","'","]",")",">",">",">","midx.drop_duplicates","(","keep=False",")","MultiIndex","(","[","(","3",",","'black","'",")","]",",","names=","[","'number","'",",","'color","'","]",")"]
code: def drop_duplicates(
      self, keep: Union[bool, str] = "first"
  ) -> "MultiIndex":
      """
      Return MultiIndex with duplicate values removed.
  
      Parameters
      ----------
      keep : {'first', 'last', ``False``}, default 'first'
          Method to handle dropping duplicates:
          - 'first' : Drop duplicates except for the first occurrence.
          - 'last' : Drop duplicates except for the last occurrence.
          - ``False`` : Drop all duplicates.
  
      Returns
      -------
      deduplicated : MultiIndex
  
      See Also
      --------
      Series.drop_duplicates : Equivalent method on Series.
      DataFrame.drop_duplicates : Equivalent method on DataFrame.
  
      Examples
      --------
      Generate a MultiIndex with duplicate values.
  
      >>> arrays = [[1, 2, 3, 1, 2], ["red", "blue", "black", "red", "blue"]]
      >>> midx = ps.MultiIndex.from_arrays(arrays, names=("number", "color"))
      >>> midx
      MultiIndex([(1,   'red'),
                  (2,  'blue'),
                  (3, 'black'),
                  (1,   'red'),
                  (2,  'blue')],
                 names=['number', 'color'])
  
      >>> midx.drop_duplicates()
      MultiIndex([(1,   'red'),
                  (2,  'blue'),
                  (3, 'black')],
                 names=['number', 'color'])
  
      >>> midx.drop_duplicates(keep='first')
      MultiIndex([(1,   'red'),
                  (2,  'blue'),
                  (3, 'black')],
                 names=['number', 'color'])
  
      >>> midx.drop_duplicates(keep='last')
      MultiIndex([(3, 'black'),
                  (1,   'red'),
                  (2,  'blue')],
                 names=['number', 'color'])
  
      >>> midx.drop_duplicates(keep=False)
      MultiIndex([(3, 'black')],
                 names=['number', 'color'])
      """
      with ps.option_context(
          "compute.default_index_type", "distributed"
      ):
          # The attached index caused by `reset_index` below is used for sorting only,
          # and it will be dropped soon,
          # so we enforce “distributed” default index type
          psdf = self.to_frame().reset_index(drop=True)
      return ps.MultiIndex.from_frame(
          psdf.drop_duplicates(keep=keep).sort_index()
      )
  
imports: from functools import partial, reduce
  from typing import Any, Callable, Iterator, List, Optional, Tuple, Union, cast, no_type_check
  import pandas
  from pandas.api.types import is_hashable, is_list_like
  from pyspark.sql import functions, Column, Window
  from pyspark.sql.types import DataType
  from pyspark.sql.utils import get_column_class
  from pyspark import pandas
  from pyspark.pandas._typing import Label, Name, Scalar
  from pyspark.pandas.exceptions import PandasNotImplementedError
  from pyspark.pandas.frame import DataFrame
  from pyspark.pandas.indexes.base import Index
  from pyspark.pandas.missing.indexes import MissingPandasLikeMultiIndex
  from pyspark.pandas.series import Series, first_series
  from pyspark.pandas.utils import compare_disallow_null, is_name_like_tuple, name_like_string, scol_for, verify_temp_column_name, validate_index_loc, xor
  from pyspark.pandas.internal import InternalField, InternalFrame, NATURAL_ORDER_COLUMN_NAME, SPARK_INDEX_NAME_FORMAT
label_desc: Use image node_id 30 for calling the MultiIndex obj's underlying member method code with example usage: obj.drop_duplicates(keep) and returns: ps