Проверка для каждого значения в столбце имеет только одно соответствующее значение в другом столбце pandas - PullRequest
1 голос
/ 24 февраля 2020

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

df = pd.DataFrame({'ID': [1234, 1234, 1234, 5678, 5678, 5678, 9999, 9999, 1234, 1234, 1234, 1234],
 'Name': ['AA', 'AA', 'AA', 'BB', 'BB', 'DD', 'EE', 'EE', 'CC', 'CC', 'BB', 'BB'])
      ID Name
0   1234   AA
1   1234   AA
2   1234   AA
3   5678   BB
4   5678   BB
5   5678   DD
6   9999   EE
7   9999   EE
8   1234   CC
9   1234   CC
10  1234   BB
11  1234   BB

Я хотел бы добавить другое поле в этом фрейме данных (с True / False) таким образом, чтобы. для каждого значения идентификатора должно быть только одно соответствующее значение.

Итак, мой ожидаемый результат выглядит следующим образом .. для идентификатора - 1234 есть два соответствующих значения (AA и BB), одно с меньшим количеством должен быть помечен.

      ID Name
5   5678   DD
8   1234   CC
9   1234   CC
10  1234   BB
11  1234   BB

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Вот мое решение:

# toy data
df = pd.DataFrame({'ID': [1234, 1234, 1234, 5678, 5678, 5678, 9999, 9999, 1234, 1234, 1234, 1234],
 'Name': ['AA', 'AA', 'AA', 'BB', 'BB', 'DD', 'EE', 'EE', 'CC', 'CC', 'BB', 'BB']}
)

# filter those ID's that appear with multiple names
non_unique = df.groupby('ID').Name.transform('nunique').ne(1)
df = df[non_unique]

# count the occurrences of each combination ['ID','Name']
counts = df[non_unique].groupby(['ID','Name']).Name.transform('count')

# filter those with minimal occurrences within each ID
df[counts == counts.groupby(df['ID']).transform('min')]

Вывод:

      ID Name
5   5678   DD
8   1234   CC
9   1234   CC
10  1234   BB
11  1234   BB
0 голосов
/ 24 февраля 2020
import pandas as pd
df = pd.DataFrame({'ID': ['1234','1234','1234','1234','4567','1234'],'NAME':['AA','AA','AA','AA','AA','BB']})
df['CHECK'] = df.duplicated('ID', keep='last')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...