如何在熊猫数据框中找到重复项? [复制]
Posted
技术标签:
【中文标题】如何在熊猫数据框中找到重复项? [复制]【英文标题】:How can I find duplicates in a pandas data frame? [duplicate] 【发布时间】:2021-04-26 04:00:33 【问题描述】:我的任务是在 pandas 数据框中突出显示所有重复的电子邮件。 是否有此功能或删除所有非重复项的方法,这让我可以从数据集中的所有重复项中获得一个很好的列表?
该表由六列组成:
Email, FirstName, LastName, C_ID, A_ID, CreatedDate
a@a.com, Bill, Schneider, 123, 321, 20190502
a@a.com, Damian, Schneider, 124, 231, 20190502
b@b.com, Bill, Schneider, 164, 313, 20190503
我想去掉最后一列,因为最后一封邮件不是重复的。
【问题讨论】:
定义“重复”的含义:您只表示“电子邮件”是相同的。或者您的意思是“电子邮件相同,或者名字和姓氏都相同”? (例如,如果 FirstName=='William' 和 LastName=='Schneider' 会怎样) "表格由六列组成" ... "我想去掉最后一列..." 你的意思是'行'! df.duplicated(keep=False) 将为您提供完整列表。如果只想保留一行,可以使用 keep='first' 将保留第一行并将其他行标记为重复。 keep='last' 执行相同的操作并将重复项标记为 True,但最后一次出现除外。如果要检查特定列,请使用子集=['colname1']。如果你想删除它们,你可以使用 drop_duplicates()。有关这两个的更多详细信息,请参阅 pandas 文档 大家请停止发布重复的答案。 SO 已经有3881 Q&A on [pandas] drop_duplicates,还有更多关于 'unique'、'distinct' 等的信息。所以,弄清楚这个问题应该归结到哪些。 【参考方案1】:这样的东西可能是您正在寻找的解决方案:
import pandas as pd
series = [
('a@a.com','Bill', 'Schneider', 123, 321, 20190502),
('a@a.com', 'Damian', 'Schneider', 124, 231, 20190502),
('b@b.com', 'Bill', 'Schneider',164, 313, 20190503)
]
# Create a DataFrame object
df = pd.DataFrame(series, columns=['email', 'first name', 'last name', 'C_ID', 'A_ID', 'CreatedDate'])
# Find duplicate rows
df_duplicates = df[df.email.duplicated()]
print(df_duplicates)
【讨论】:
【参考方案2】:df = pd.DataFrame(table, columns = ['Email'])
df_duplicates_removed = pd.DataFrame.drop_duplicates(df)
(其中 table 是原始数据框的名称)。
【讨论】:
【参考方案3】:你可以使用value_counts
这会为您提供每封电子邮件的计数(作为一个系列)。然后遍历该系列并删除任何仅包含 1 个值的行。
完整的代码类似于:
for index, value in df.Email.value_counts().iteritems():
if value == 1:
df = df[df.Email != index]
更新 我不知道重复直到指出,所以看起来最好的方法是:
df[df.Email.duplicated(keep=False)]
【讨论】:
使用重复的代替value_counts()
只是一个比drop_duplicates
/duplicated
/unique
更差的替代方案。我们不需要计算所有频率,只需计算每个值是否计数 > 1 的二进制。以上是关于如何在熊猫数据框中找到重复项? [复制]的主要内容,如果未能解决你的问题,请参考以下文章