【问题标题】:How do I check if values in one DataFrame are also values of another DataFrame?如何检查一个 DataFrame 中的值是否也是另一个 DataFrame 的值?
【发布时间】:2021-01-17 08:36:30
【问题描述】:

我有两个数据框,都包含 FirstName 和 LastName 列。我想看看 df_mini 中是否有人也在 df_master 中。这是我目前所拥有的:

for person in df_mini:
    if (df_mini.FirstName == df_master.FirstName) and (df_mini.LastName == df_master.LastName):
        df_mini['Is Duplicate?'].append('Yes')
    else:
        df_mini['Is Duplicate?'].append('No')

我收到一条错误消息,提示“只能比较具有相同标签的系列对象”。我可能缺少一些简单的东西。我知道有一个 isin 方法,但我只知道如果我比较一列,我该如何使用它。

编辑:

只是为了提供更多信息——df_master 有 60,000 个值,df_mini 有大约 300 个。我需要对照 df_master 检查 df_mini 中的每个值。

df_mini 列: stg_signup_id, cons_id, signup_form_name, create_dt, email, FirstName LastName, phone, zip, source, subsource, Opt-In, isDuplicate

df_master 列:ID、姓氏、名字、中间名、后缀、家庭电话、地址、城市、州/省、邮政编码/邮政、Zip4、国家/地区代码

【问题讨论】:

  • 使用merge 并合并名字和姓氏。您可以使用带有指示符的外部来定位两个数据帧中的名字和姓氏。如果您提供示例输入,SO 会告诉您如何操作。

标签: python pandas data-science data-cleaning


【解决方案1】:

这是一种方法。

解决方案

import pandas as pd
import numpy as np    

duplicate_indices = df_mini.merge(df_master, on=['FirstName', 'LastName'], how='inner').index
df_mini['isDuplicate'] = np.where(df_mini.index.isin(duplicate_indices), 'Yes', 'No')

输出

    FirstName   LastName    isDuplicate
0   bob         dylan       Yes
1   alan        partridge   No
2   steve       carell      No

示例数据帧

df_mini = pd.DataFrame({
    'FirstName': ['bob', 'alan', 'steve'],
    'LastName': ['dylan', 'partridge', 'carell']
})

df_master = pd.DataFrame({
    'FirstName': ['jeff', 'boris', 'bob'],
    'LastName': ['bezos', 'johnson', 'dylan']
})

【讨论】:

  • 这个运行,但我得到了很多误报。 df_master(但不是 df_mini)有一个 MiddleName 列——这可能会影响事情吗? df_master 还有一个地址字段。如果约翰亚当斯住在威廉姆斯街,那会说这是约翰威廉姆斯的骗局吗?还是只检查名字和姓氏?
猜你喜欢
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2021-01-17
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
相关资源
最近更新 更多