【问题标题】:python - dataframe find duplicate with condition one row is differentpython - 数据框找到重复的条件一行是不同的
【发布时间】:2020-06-09 00:51:23
【问题描述】:

我想查找条件 1 列不同的重复行

df = pd.DataFrame([['A', '1','Tom'], ['A','1','Tom'], ['A','1','Jerry'], ['A','1','Jerry'], ['A','2','Mary'],['B','1','Tony'],['B','1','Andy']], columns = ['company code','user id', 'user name'])
df[out]
             company code  user id    user name 
    0            A            1          Tom
    1            A            1          Tom
    2            A            1         Jerry
    3            A            1         Jerry
    4            A            2          Mary
    5            B            1          Tony
    6            B            1          Andy

条件是 1 家公司只能有 1 个同名的用户 ID。在这种情况下,结果将如下所示,因为用户 ID 是不同的名称(Tom and Jerry),所以它是重复数据。

             company code  user id    user name    Duplicate
    0            A            1          Tom          True
    1            A            1          Tom          True
    2            A            1         Jerry         True
    3            A            1         Jerry         True
    4            A            2          Mary         False
    5            B            1          Tony         True
    6            B            1          Andy         True

我尝试使用 duplicated() 但结果不正确,如下所示:

df['dup_id'] = df[['company code','user id']].duplicated(keep=False)
df['dup_name'] = df[['company code','user name']].duplicated(keep=False)
df['result dup'] = np.where((df['dup_id']==True & (df['dup_name']==False)),True,False)

      company code user id user name  dup_id  dup_name  result dup
0            A       1       Tom      True      True       False
1            A       1       Tom      True      True       False
2            A       1     Jerry      True      True       False
3            A       1     Jerry      True      True       False
4            A       2      Mary     False     False       False
5            B       1      Tony      True     False        True
6            B       1      Andy      True     False        True

由于汤姆和杰瑞有重复的名字,所以我一直在努力寻找不同的名字。提前感谢您的帮助。

【问题讨论】:

  • 为什么Tony 在第 5 行和第 6 行没有重复?
  • 这只是df.duplicated(keep=False)?
  • @QuangHoang 你对我的错误感到抱歉。我已经编辑了我的问题。谢谢
  • @Erfan 我尝试使用 df.duplicated(keep=False) 但由于用户 ID 是主键,所以如果名称也不同,我想返回 True。
  • 你有 dup_id 然后

标签: python pandas numpy dataframe


【解决方案1】:

将最后一行替换为:

df['result_dup'] = df.apply(lambda x: x.dup_id or x.dup_name, axis=1)

【讨论】:

    【解决方案2】:

    不是吗:

    df['Duplicate'] = df.duplicated(['company code', 'user id'], keep=False)
    

    输出:

      company code user id user name  Duplicate
    0            A       1       Tom       True
    1            A       1       Tom       True
    2            A       1     Jerry       True
    3            A       1     Jerry       True
    4            A       2      Mary      False
    5            B       1      Tony       True
    6            B       1      Andy       True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-03
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 2015-12-24
      • 2021-08-26
      • 2022-11-26
      相关资源
      最近更新 更多