python-数据帧查找重复,条件是一行不同

python-数据帧查找重复,条件是一行不同,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我想发现条件为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 use

我想发现条件为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和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

因为汤姆和杰瑞的名字是重复的,所以我一直在努力争取不同的名字。提前感谢您的帮助

将最后一行替换为:

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

将最后一行替换为:

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

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
是不是:

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

为什么第5行和第6行没有复制Tony?这只是复制的df.duplicated(keep=False)?@QuangHoang你是对的,对不起我的错误。我已经编辑了我的问题。Thanks@Erfan我尝试使用df.duplicated(keep=False),但由于用户id是主键,所以如果名称也不同,我希望返回True。您使用的是
dup\u id
,那么为什么
Tony
在第5行和第6行没有重复?这只是
df.duplicated(keep=False)
?@QuangHoang您是对的,抱歉我的错误。我已经编辑了我的问题。Thanks@Erfan我尝试使用df.duplicated(keep=False),但由于用户id是主键,所以如果名称也不同,我希望返回True。您可以使用
dup\u id