【问题标题】:How to remove duplicates and only keep rows in which two columns contain same words (Pandas)如何删除重复项并仅保留两列包含相同单词的行(熊猫)
【发布时间】:2022-01-23 15:49:47
【问题描述】:

我已通过特定 ID 上的 Left Join 合并了两个数据集。 然而,正确的 DF 有多个具有相同 ID 的行,但其中可以有不同的企业归因于相同的 ID。每个 ID 我只需要一行,它需要是左右数据框中的 Businesses 匹配的那一行。

然而,最后一个问题是,两个数据框中的业务不完全匹配(因此我没有对此进行合并) - 左侧数据框将包含部分业务名称,而右侧 DF 包含全名,因此我想当右 DF 业务名称列中的业务名称不包含原始 DF 名称列中的任何单词时,我可以删除重复项。

下面是一个我希望更有意义的可视化

目前:

Business Name (Left) ID Business Name (Right)
Dewes 1225 Dewes & Sons Ltd
Dewes 1225 Stanleys PLC
Dewes 1225 Shark Ltd
Dewes 1225 Robots R Us Inc
Apple 1456 L&L & Co
Apple 1456 Apple Inc

我想要什么

Business Name (Left) ID Business Name (Right)
Dewes 1225 Dewes & Sons Ltd
Apple 1456 Apple Inc

谢谢, 奥利

【问题讨论】:

  • 您可以删除重复项:df.drop_duplicates(subset=["Business Name (Left)","ID"])
  • @Bharath 这不一定意味着我会得到正确的匹配企业认为对吗?例如,如果我删除重复项,我最终可能会在左侧出现“Dewes”,而在右栏中会出现“Shark Ltd”,这会是错误的吗?
  • 如果要保留第一个副本,请相应地使用参数keep='first'keep='last' 作为最后一个副本。
  • 如果要按字母顺序保留,请先使用sort_values,然后删除重复项。
  • @Bharath 我想保留的行可能是第一行、最后一行或中间行——对它们进行排序不一定能解决这个问题。不过谢谢你,我知道我需要删除重复项 - 我现在只需要在条件的其他部分保留那些右侧包含左侧的部分

标签: pandas


【解决方案1】:

欢迎使用 Stackoverflow。一个可以接受您想法的可能解决方案如下。

df[df.apply(lambda x: x['Business Name (Left)'] in x['Business Name (Right)'].split(' '), axis=1)]

在这种情况下,仅过滤合并的数据帧。这适用于此,但前提是右栏中只有一个单词。这应该相对容易更改,通过拆分写入列而不是使用 .isin()。

【讨论】:

    猜你喜欢
    • 2020-03-05
    • 2021-12-09
    • 2022-08-12
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多