сравнить различные значения двух столбцов с пандами - PullRequest
0 голосов
/ 22 марта 2019

Я использовал этот простой DataFrame, чтобы немного поиграть.


     A   B
0   123 abc
1   123 abc
2   123 def
3   456 def
4   456 def

Я хочу проверить, всегда ли значение столбца B одинаково для каждого отдельного значения в столбце A. Например, «123» в столбце A всегда должно соответствовать исключительно «abc» в столбце B.

Вот что я пробовал до сих пор:

df2 = df[['A','B']].drop_duplicates()
df[(df['A'] == df2['A']) & (df['B'] == df2['B'])].values

Но я получаю ошибку, потому что индекс DataFrames не совпадает.

Тогда я безуспешно пытался использовать список.

test=list(set(df['A']))
for l in test:
    df[df.A== l].B.drop_duplicates()

В небольшом DataFrame, подобном тому, который я использовал, это легко увидеть, но как мне легко проверить его в более крупном DataFrame с, скажем, 43K записями?

EDIT

Благодаря ответам я знаю, что могу фильтровать по нескольким комбинациям, например так:

df.groupby('A').filter(lambda x: x['B'].nunique()> 1)

К сожалению, это решение возвращает


     A   B
0   123 abc
1   123 abc
2   123 def

Мне нужен только вывод, как

     A   B
0   123 def

Чтобы найти те случаи, когда «123» не исключительно соответствует «abc».

Есть ли простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019
df.groupby(['A',"B"]).filter(lambda x : len(x)==1)

и вывод будет

    A   B
2   123 def
0 голосов
/ 22 марта 2019

Попробуйте с помощью:

df.groupby('A').agg({'B': pd.Series.nunique})

или,

df.groupby('A')['B'].nunique()

Как упоминалось Вэнь-Беном, если число B больше 1, то существует несколько комбинаций.

ОБНОВЛЕНИЕ

Для фильтрации комбинаций с несколькими счетами вы можете использовать filter ():

df.groupby('A').filter(lambda x: x['B'].nunique()> 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...