【问题标题】:How to drop duplicate data with different column names in pandas?如何在熊猫中删除具有不同列名的重复数据?
【发布时间】:2021-09-25 05:06:28
【问题描述】:

我有一个 DataFrame,其中的列具有不同名称的重复数据:

In[1]: df
Out[1]: 
  X1   X2  Y1   Y2
 0.0  0.0  6.0  6.0
 3.0  3.0  7.1  7.1
 7.6  7.6  1.2  1.2

我知道 .drop(columns = ) 存在,但是有没有一种更有效的方法来删除这些而不必列出列名?与否.. 请让我知道,因为我可以使用 .drop()

【问题讨论】:

    标签: python pandas dataframe unique drop-duplicates


    【解决方案1】:

    您可以使用Tdrop_duplicates 转置然后转回:

    >>> df.T.drop_duplicates().T
        X1   Y1
    0  0.0  6.0
    1  3.0  7.1
    2  7.6  1.2
    >>> 
    

    或者locduplicated

    >>> df.loc[:, df.T.duplicated(keep='last')]
        X1   Y1
    0  0.0  6.0
    1  3.0  7.1
    2  7.6  1.2
    >>> 
    

    【讨论】:

    • 抱歉,我忘了提及这一点,但是我的数据有另一列没有重复,例如X1 X2 Y1 Y2 Z。我注意到使用此代码完全删除了 Z 列。如何将此列的所有内容编码为异常?
    • @ahnnni 然后使用第一个解决方案。
    • @ahnnni 第一个解决方案应该可以工作
    【解决方案2】:

    我们可以在轴 1 上使用np.unique。不幸的是,没有用于删除重复列的 pandas 内置函数。

    df.drop_duplicates 只删除重复的行。

    返回删除重复行的 DataFrame。

    我们可以围绕np.unique 创建一个函数来删除重复的列。

    def drop_duplicate_cols(df):
        uniq, idxs = np.unique(df, return_index=True, axis=1)
        return pd.DataFrame(uniq, index=df.index, columns=df.columns[idxs])
    
    drop_duplicate_cols(X)
        X1   Y1
    0  0.0  6.0
    1  3.0  7.1
    2  7.6  1.2
    

    Online Demo

    注意: np.unique docs:

    返回数组中排序后的唯一元素。

    解决方法:要保留原始顺序,请对idxs 进行排序。


    在具有多个dtypes 的数据帧上使用.T 会与您的实际dtypes 混淆。

    df = pd.DataFrame({'A': [0, 1], 'B': ['a', 'b'], 'C': [0, 1], 'D':[2.1, 3.1]})
    df.dtypes
    A      int64
    B     object
    C      int64
    D    float64
    dtype: object
    
    df.T.T.dtypes
    A    object
    B    object
    C    object
    D    object
    dtype: object
    # To get back original `dtypes` we can use `.astype`
    df.T.T.astype(df.dtypes).dtypes
    A      int64
    B     object
    C      int64
    D    float64
    dtype: object
    

    【讨论】:

    • 这应该更快,因为它在 numpy 数组上使用 numpy 函数,而无需转换形状。 +1
    • @anky 谢谢 :D 我相信.T 有一定的开销。 timeit over OP;s data np.unique 几乎快 8 倍。但是np.unique 不能很好地扩展我想我在某个地方读到过。
    • @anky 另一个主要缺陷是当 df 有多种类型时,.T 也会改变 dtypes。
    • 不是缺陷,而是要知道的警告。
    • @ahnnni Online demo 按预期工作。
    猜你喜欢
    • 1970-01-01
    • 2017-09-27
    • 2017-10-14
    • 2017-01-16
    • 2017-03-26
    • 2019-11-08
    • 2020-08-10
    • 1970-01-01
    • 2023-02-18
    相关资源
    最近更新 更多