【问题标题】:Pandas: Delete duplicated items in a specific columnPandas:删除特定列中的重复项
【发布时间】:2018-05-13 05:28:08
【问题描述】:

我有一个熊猫数据框(这里使用 excel 表示):

现在我想删除特定行 (B) 的所有重复项 (1)。 我该怎么做?

对于此示例,结果如下所示:

【问题讨论】:

    标签: pandas


    【解决方案1】:

    您可以使用duplicated 作为布尔掩码,然后通过locmasknumpy.where 设置NaNs:

    df.loc[df['B'].duplicated(), 'B'] = np.nan
    

    df['B'] = df['B'].mask(df['B'].duplicated())
    

    df['B'] = np.where(df['B'].duplicated(), np.nan,df['B'])
    

    如果需要,也可以按B 列删除重复行:

    df = df.drop_duplicates(subset=['B'])
    

    示例:

    df = pd.DataFrame({
        'B': [1,2,1,3],
        'A':[1,5,7,9]
    })
    print (df)
       A  B
    0  1  1
    1  5  2
    2  7  1
    3  9  3
    
    df.loc[df['B'].duplicated(), 'B'] = np.nan
    print (df)
       A    B
    0  1  1.0
    1  5  2.0
    2  7  NaN
    3  9  3.0
    
    df = df.drop_duplicates(subset=['B'])
    print (df)
       A  B
    0  1  1
    1  5  2
    3  9  3
    

    【讨论】:

    • 非常感谢!你知道,如何用“df.drop_duplicates()”来做吗?
    • 是的,使用df.drop_duplicates(subset=['B'])
    • 真是太好了!非常感谢 !我实际上是在尝试将“删除”列存储为现有数据框中的新列,如下所示: df['name'] = df.drop_duplicates(subset=['B']) ... 但它不起作用.你知道为什么吗?
    • @totyped - 不确定是否理解 - drop_duplicates 删除所有行,输出是另一个没有重复的 DataFrame。所以不可能添加到新列。
    • 但是有可能通过join添加所有列 - 欺骗被NaNs - df = df.join(df.drop_duplicates(subset=['B']), lsuffix='_')替换
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2021-02-27
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多