比较单个数据帧中相同变量的 2 个值

Comparing 2 values of same variable in single dataframe

我有一个数据框如下:

Obs. ID   Name type
  1) 123  abc  duplicate
  2) 123  abc  duplicate
  3) 145  abc  abc
  4) 156  abc  duplicate
  5) 156  abc  duplicate

如果 ID 相同,就像在 obs 中一样。 1 and 2 or 4 and 5 然后我想创建一个新变量 type=duplicate else type=vaule in Name variable(i.e abc)

df['Dup'] = df.ID.duplicated(keep=False).map({True: 'dup', False: 'single'})

df
  Obs.   ID Name     Dup
0   1)  123  abc     dup
1   2)  123  abc     dup
2   3)  145  abc  single
3   4)  156  abc     dup
4   5)  156  abc     dup

我们可以使用duplicated with np.where根据结果设置值:

df['type'] = np.where(df.duplicated('ID', False), 'Duplicate', 'Single')

print(df)

  Obs.   ID Name       type
0   1)  123  abc  Duplicate
1   2)  123  abc  Duplicate
2   3)  145  abc     Single
3   4)  156  abc  Duplicate
4   5)  156  abc  Duplicate

对于更新,您只需要一个简单的星期:

df['type'] = np.where(~df.duplicated('ID', False), df.Name, 'Duplicate')

print(df)

  Obs.   ID Name       type
0   1)  123  abc  Duplicate
1   2)  123  abc  Duplicate
2   3)  145  abc        abc
3   4)  156  abc  Duplicate
4   5)  156  abc  Duplicate