熊猫重复显示非重复行

时间:2021-06-25 09:23:30

标签: python pandas dataframe

正如您在下面的代码中看到的,我调用 duplicated 来查找重复的行。它说 2877 个项目是重复的,但从我在结果 (head()) 中看到的结果来看,它们不是!

有什么问题吗?

>>> df = pd.read_table('xAttr_validation_no_dups.tsv')
>>> dups = df[df.duplicated(subset=['input_text', 'target_text'], keep=False)]
>>> len(dups)
2877
>>> dups.head()
    prefix                                      input_text   target_text
13   xAttr  PersonX از ___ برای کمک به PersonY تشکر می کند      thankful
14   xAttr  PersonX از ___ برای کمک به PersonY تشکر می کند      grateful
15   xAttr  PersonX از ___ برای کمک به PersonY تشکر می کند  appreciative
36   xAttr           PersonX برای دریافت ___ پرداخت می کند          rich
251  xAttr             PersonX ابتدا ___ را در نظر می گیرد    thoughtful

2 个答案:

答案 0 :(得分:2)

df.duplicated()

以与初始数据帧相同的顺序返回结果。 这意味着,您的重复项很可能在数据框中更靠后。由于 .head() 仅显示前 5 个,因此这可能不足以实际看到它们。

如果有奇数的重复,例如 2877 的奇数也是可能的。 3 倍感谢。

为了更好地了解它是否有效,您可以在使用 head 之前进行排序:

dups.sort_values(by=['input_text', 'target_text']).head()

要回答标题中的问题,如何仅获取唯一值,您可以使用 ~ 反转获得的布尔掩码:

df[~df.duplicated(subset=['input_text', 'target_text'], keep=False)]

答案 1 :(得分:-1)

我认为下面应该可以像你在一个列上做的那样工作:

df[df[['input_text', 'target_text']].duplicated() == True]