def drop(self, labels: Optional[Union[(Name, List[Name])]]=None, axis: Optional[Axis]=0, index: Union[(Name, List[Name])]=None, columns: Union[(Name, List[Name])]=None) -> 'DataFrame':
    "\n        Drop specified labels from columns.\n\n        Remove rows and/or columns by specifying label names and corresponding axis,\n        or by specifying directly index and/or column names.\n        Drop rows of a MultiIndex DataFrame is not supported yet.\n\n        Parameters\n        ----------\n        labels : single label or list-like\n            Column labels to drop.\n        axis : {0 or 'index', 1 or 'columns'}, default 0\n\n            .. versionchanged:: 3.3\n               Set dropping by index by default.\n        index : single label or list-like\n            Alternative to specifying axis (``labels, axis=0``\n            is quivalent to ``index=columns``).\n\n            .. versionchanged:: 3.3\n               Added dropping rows by 'index'.\n        columns : single label or list-like\n            Alternative to specifying axis (``labels, axis=1``\n            is equivalent to ``columns=labels``).\n\n        Returns\n        -------\n        dropped : DataFrame\n\n        See Also\n        --------\n        Series.dropna\n\n        Examples\n        --------\n        >>> df = ps.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D'])\n        >>> df\n           A  B   C   D\n        0  0  1   2   3\n        1  4  5   6   7\n        2  8  9  10  11\n\n        Drop columns\n\n        >>> df.drop(['B', 'C'], axis=1)\n           A   D\n        0  0   3\n        1  4   7\n        2  8  11\n\n        >>> df.drop(columns=['B', 'C'])\n           A   D\n        0  0   3\n        1  4   7\n        2  8  11\n\n        Drop a row by index\n\n        >>> df.drop([0, 1])\n           A  B   C   D\n        2  8  9  10  11\n\n        >>> df.drop(index=[0, 1], columns='A')\n           B   C   D\n        2  9  10  11\n\n        Also support dropping columns for MultiIndex\n\n        >>> df = ps.DataFrame({'x': [1, 2], 'y': [3, 4], 'z': [5, 6], 'w': [7, 8]},\n        ...                   columns=['x', 'y', 'z', 'w'])\n        >>> columns = [('a', 'x'), ('a', 'y'), ('b', 'z'), ('b', 'w')]\n        >>> df.columns = pd.MultiIndex.from_tuples(columns)\n        >>> df  # doctest: +NORMALIZE_WHITESPACE\n           a     b\n           x  y  z  w\n        0  1  3  5  7\n        1  2  4  6  8\n        >>> df.drop(labels='a', axis=1)  # doctest: +NORMALIZE_WHITESPACE\n           b\n           z  w\n        0  5  7\n        1  6  8\n\n        Notes\n        -----\n        Currently, dropping rows of a MultiIndex DataFrame is not supported yet.\n        "
    if (labels is not None):
        if ((index is not None) or (columns is not None)):
            raise ValueError("Cannot specify both 'labels' and 'index'/'columns'")
        axis = validate_axis(axis)
        if (axis == 1):
            return self.drop(index=index, columns=labels)
        else:
            return self.drop(index=labels, columns=columns)
    else:
        if ((index is None) and (columns is None)):
            raise ValueError("Need to specify at least one of 'labels' or 'columns' or 'index'")
        internal = self._internal
        if (index is not None):
            if (is_name_like_tuple(index) or is_name_like_value(index)):
                index = [index]
            if (len(index) > 0):
                if (internal.index_level == 1):
                    internal = internal.resolved_copy
                    if (len(index) <= ps.get_option('compute.isin_limit')):
                        self_index_type = self.index.spark.data_type
                        cond = (~ internal.index_spark_columns[0].isin([SF.lit(label).cast(self_index_type) for label in index]))
                        internal = internal.with_filter(cond)
                    else:
                        index_sdf_col = '__index'
                        index_sdf = default_session().createDataFrame(pd.DataFrame({index_sdf_col: index}))
                        joined_sdf = internal.spark_frame.join(other=F.broadcast(index_sdf), on=(internal.index_spark_columns[0] == scol_for(index_sdf, index_sdf_col)), how='anti')
                        internal = internal.with_new_sdf(joined_sdf)
                else:
                    raise NotImplementedError('Drop rows of MultiIndex DataFrame is not supported yet')
        if (columns is not None):
            if is_name_like_tuple(columns):
                columns = [columns]
            elif is_name_like_value(columns):
                columns = [(columns,)]
            else:
                columns = [(col if is_name_like_tuple(col) else (col,)) for col in columns]
            if (len(columns) > 0):
                drop_column_labels = set((label for label in internal.column_labels for col in columns if (label[:len(col)] == col)))
                if (len(drop_column_labels) == 0):
                    raise KeyError(columns)
                keep_columns_and_labels = [(column, label) for (column, label) in zip(self._internal.data_spark_column_names, self._internal.column_labels) if (label not in drop_column_labels)]
                (cols, labels) = (zip(*keep_columns_and_labels) if (len(keep_columns_and_labels) > 0) else ([], []))
                internal = internal.with_new_columns([self._psser_for(label) for label in labels])
        return DataFrame(internal)
Drop specified labels from columns.

Remove rows and/or columns by specifying label names and corresponding axis,
or by specifying directly index and/or column names.
Drop rows of a MultiIndex DataFrame is not supported yet.

Parameters
----------
labels : single label or list-like
    Column labels to drop.
axis : {0 or 'index', 1 or 'columns'}, default 0

    .. versionchanged:: 3.3
       Set dropping by index by default.
index : single label or list-like
    Alternative to specifying axis (``labels, axis=0``
    is quivalent to ``index=columns``).

    .. versionchanged:: 3.3
       Added dropping rows by 'index'.
columns : single label or list-like
    Alternative to specifying axis (``labels, axis=1``
    is equivalent to ``columns=labels``).

Returns
-------
dropped : DataFrame

See Also
--------
Series.dropna

Examples
--------
>>> df = ps.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D'])
>>> df
   A  B   C   D
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11

Drop columns

>>> df.drop(['B', 'C'], axis=1)
   A   D
0  0   3
1  4   7
2  8  11

>>> df.drop(columns=['B', 'C'])
   A   D
0  0   3
1  4   7
2  8  11

Drop a row by index

>>> df.drop([0, 1])
   A  B   C   D
2  8  9  10  11

>>> df.drop(index=[0, 1], columns='A')
   B   C   D
2  9  10  11

Also support dropping columns for MultiIndex

>>> df = ps.DataFrame({'x': [1, 2], 'y': [3, 4], 'z': [5, 6], 'w': [7, 8]},
...                   columns=['x', 'y', 'z', 'w'])
>>> columns = [('a', 'x'), ('a', 'y'), ('b', 'z'), ('b', 'w')]
>>> df.columns = pd.MultiIndex.from_tuples(columns)
>>> df  # doctest: +NORMALIZE_WHITESPACE
   a     b
   x  y  z  w
0  1  3  5  7
1  2  4  6  8
>>> df.drop(labels='a', axis=1)  # doctest: +NORMALIZE_WHITESPACE
   b
   z  w
0  5  7
1  6  8

Notes
-----
Currently, dropping rows of a MultiIndex DataFrame is not supported yet.
def drop(self, labels: Optional[Union[(Name, List[Name])]]=None, axis: Optional[Axis]=0, index: Union[(Name, List[Name])]=None, columns: Union[(Name, List[Name])]=None) -> 'DataFrame':
    "\n        Drop specified labels from columns.\n\n        Remove rows and/or columns by specifying label names and corresponding axis,\n        or by specifying directly index and/or column names.\n        Drop rows of a MultiIndex DataFrame is not supported yet.\n\n        Parameters\n        ----------\n        labels : single label or list-like\n            Column labels to drop.\n        axis : {0 or 'index', 1 or 'columns'}, default 0\n\n            .. versionchanged:: 3.3\n               Set dropping by index by default.\n        index : single label or list-like\n            Alternative to specifying axis (``labels, axis=0``\n            is quivalent to ``index=columns``).\n\n            .. versionchanged:: 3.3\n               Added dropping rows by 'index'.\n        columns : single label or list-like\n            Alternative to specifying axis (``labels, axis=1``\n            is equivalent to ``columns=labels``).\n\n        Returns\n        -------\n        dropped : DataFrame\n\n        See Also\n        --------\n        Series.dropna\n\n        Examples\n        --------\n        >>> df = ps.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D'])\n        >>> df\n           A  B   C   D\n        0  0  1   2   3\n        1  4  5   6   7\n        2  8  9  10  11\n\n        Drop columns\n\n        >>> df.drop(['B', 'C'], axis=1)\n           A   D\n        0  0   3\n        1  4   7\n        2  8  11\n\n        >>> df.drop(columns=['B', 'C'])\n           A   D\n        0  0   3\n        1  4   7\n        2  8  11\n\n        Drop a row by index\n\n        >>> df.drop([0, 1])\n           A  B   C   D\n        2  8  9  10  11\n\n        >>> df.drop(index=[0, 1], columns='A')\n           B   C   D\n        2  9  10  11\n\n        Also support dropping columns for MultiIndex\n\n        >>> df = ps.DataFrame({'x': [1, 2], 'y': [3, 4], 'z': [5, 6], 'w': [7, 8]},\n        ...                   columns=['x', 'y', 'z', 'w'])\n        >>> columns = [('a', 'x'), ('a', 'y'), ('b', 'z'), ('b', 'w')]\n        >>> df.columns = pd.MultiIndex.from_tuples(columns)\n        >>> df  # doctest: +NORMALIZE_WHITESPACE\n           a     b\n           x  y  z  w\n        0  1  3  5  7\n        1  2  4  6  8\n        >>> df.drop(labels='a', axis=1)  # doctest: +NORMALIZE_WHITESPACE\n           b\n           z  w\n        0  5  7\n        1  6  8\n\n        Notes\n        -----\n        Currently, dropping rows of a MultiIndex DataFrame is not supported yet.\n        "
    if (labels is not None):
        if ((index is not None) or (columns is not None)):
            raise ValueError("Cannot specify both 'labels' and 'index'/'columns'")
        axis = validate_axis(axis)
        if (axis == 1):
            return self.drop(index=index, columns=labels)
        else:
            return self.drop(index=labels, columns=columns)
    else:
        if ((index is None) and (columns is None)):
            raise ValueError("Need to specify at least one of 'labels' or 'columns' or 'index'")
        internal = self._internal
        if (index is not None):
            if (is_name_like_tuple(index) or is_name_like_value(index)):
                index = [index]
            if (len(index) > 0):
                if (internal.index_level == 1):
                    internal = internal.resolved_copy
                    if (len(index) <= ps.get_option('compute.isin_limit')):
                        self_index_type = self.index.spark.data_type
                        cond = (~ internal.index_spark_columns[0].isin([SF.lit(label).cast(self_index_type) for label in index]))
                        internal = internal.with_filter(cond)
                    else:
                        index_sdf_col = '__index'
                        index_sdf = default_session().createDataFrame(pd.DataFrame({index_sdf_col: index}))
                        joined_sdf = internal.spark_frame.join(other=F.broadcast(index_sdf), on=(internal.index_spark_columns[0] == scol_for(index_sdf, index_sdf_col)), how='anti')
                        internal = internal.with_new_sdf(joined_sdf)
                else:
                    raise NotImplementedError('Drop rows of MultiIndex DataFrame is not supported yet')
        if (columns is not None):
            if is_name_like_tuple(columns):
                columns = [columns]
            elif is_name_like_value(columns):
                columns = [(columns,)]
            else:
                columns = [(col if is_name_like_tuple(col) else (col,)) for col in columns]
            if (len(columns) > 0):
                drop_column_labels = set((label for label in internal.column_labels for col in columns if (label[:len(col)] == col)))
                if (len(drop_column_labels) == 0):
                    raise KeyError(columns)
                keep_columns_and_labels = [(column, label) for (column, label) in zip(self._internal.data_spark_column_names, self._internal.column_labels) if (label not in drop_column_labels)]
                (cols, labels) = (zip(*keep_columns_and_labels) if (len(keep_columns_and_labels) > 0) else ([], []))
                internal = internal.with_new_columns([self._psser_for(label) for label in labels])
        return DataFrame(internal)