【问题标题】:Pandas - How to remove duplicates from a subset based on another subsetPandas - 如何根据另一个子集从一个子集中删除重复项
【发布时间】:2022-01-23 03:21:47
【问题描述】:

我有 2 个具有相似列的子集,但它们共有的一列是列 A

我有左边的 df L 和右边的 df R

我想确保在 L 中看到的列 A 的任何重复项都从 L 中删除 - 整个列。

如何做到这一点?

import pandas as pd
L_df = pd.DataFrame({'A': ['bob/is/cool', 'alice/is/cool', 'jim/is/cool'], 
                   'view': ['A', 'B', 'B']})
R_df = pd.DataFrame({'A': ['ralf/is/cool', 'i/am/cool', 'alice/is/cool'], 
                   'view': ['A', 'B', 'C']})

我想得到这个结果,结果是删除列 A 的重复值,并从 L 而不是 R 中获取重复值。

所以我们将alice/is/coolview 值设为C 而不是B,如果这有意义的话:)

输出将是

out = pd.DataFrame({'A': ['ralf/is/cool', 'i/am/cool', 'alice/is/cool', 'bob/is/cool', 'jim/is/cool'], 
                   'view': ['A', 'B', 'C', 'A', 'B']})

【问题讨论】:

  • 能否提供您的数据框样本和预期输出? :)
  • 请提供mcve
  • 完成 :) 希望更清楚一点?
  • 能否请您添加一个您想要作为输出的df?
  • 为什么'bob/is/cool' 在您想要的输出中看到'B'

标签: python pandas duplicates


【解决方案1】:

这就是你所追求的吗?

>>> pd.concat([R_df, L_df]).drop_duplicates(keep='first', subset='A')
               A view
0   ralf/is/cool    A
1      i/am/cool    B
2  alice/is/cool    C
0    bob/is/cool    A
2    jim/is/cool    B

注意:这是根据您的描述进行的疯狂猜测。

它将不加选择地删除任何重复项(在 R 内、L 内或两者的串联中)并只保留第一个。

您可能希望根据重复的位置和数量对案例进行更微妙的处理,但如果没有更强大的示例集,就很难判断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多