Сравнение 2 значений одной и той же переменной в одном кадре данных - PullRequest
2 голосов
/ 25 апреля 2020

У меня есть фрейм данных следующим образом:

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 и 2 или 4 и 5, затем я хочу создать новую переменную типа = дубликат, иначе тип = vaule в переменной имени (т.е. ab c)

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Мы можем использовать duplicated с 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
0 голосов
/ 25 апреля 2020

IIU C

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
...