【问题标题】:How to write a condition in python to only remove duplicates that have 2 and more duplicates如何在python中编写条件以仅删除具有2个或更多重复项的重复项
【发布时间】:2021-08-15 00:17:07
【问题描述】:

我有一个包含重复产品 ID 的数据集。但是,我只想从“翻译”列中删除所有值为“否”的重复项 - 到目前为止,我有这个:

df2 = df.drop_duplicates(subset="Product ID ") 

但是,我需要添加条件以仅删除那些重复两次以上的产品 ID,例如:

Product ID | Translation (Column name) 
58965        Yes 
58965        Yes  
58965        No 

我想只保留前两行并删除带有条件的最后一行,Translation = No 从上面的示例中。怎么写?

谢谢大家!

【问题讨论】:

  • 尝试做这样的事情:df.loc[df.groupby('Product ID').cumcount().lt(2)]
  • @rhug123 你的回答是正确的。你想把它作为答案吗?
  • 肯定会那样做
  • 谢谢@rhug123 - 因为骗子不按顺序排列,所以我忘了提一下,此外,我想至少让那些骗子的价值为“否” “翻译”栏 - 我将如何在您的答案中写下? df.loc[df.groupby('Product ID').cumcount().lt(2)]
  • 在您使用Translation 编辑的列中,最后一行是No。所以你还想删除最后一行?

标签: python pandas duplicates conditional-statements


【解决方案1】:

试试这个:

df.loc[df.groupby('Product ID').cumcount().lt(2)]

【讨论】:

  • 谢谢你,它起作用了,但是,由于被骗者不按顺序排列,我忘了提一下,此外,我想至少让那些被骗者留下一个有价值的人' “翻译”列中的“否”-我将如何在您的答案中写下? df.loc[df.groupby('Product ID').cumcount().lt(2)] – 再次感谢! @rhug123
  • 会在上面提供的答案之前添加df = df.sort_values('Translation') 给您所需的内容吗?
  • 实际上,我不想保留 Translation = No - 我如何编写保留所有产品 ID 重复项,除了具有 Translation = No 的那些?泰@rhug123
【解决方案2】:

很遗憾,我认为您不能使用drop_duplicates() 来解决这个问题。我会说使用计数器,当“产品 ID”的计数超过 2 时,开始将它们设置为 NaN,然后您可以在最后使用 df.dropna()

类似:

from collections import Counter
import numpy as np

c = Counter()
for index, row in df:
    pid = row['Product ID']
    c[pid] += 1
    if c[pid] > 2:
        df.loc[index, 'Product ID'] = np.nan

df.dropna(inplace=True)

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 2019-07-30
    • 1970-01-01
    • 2018-04-26
    • 2022-08-15
    • 1970-01-01
    • 2018-06-15
    • 2019-01-05
    • 2021-07-16
    相关资源
    最近更新 更多