正如您在下面的代码中看到的,我调用 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
答案 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]