Проверьте отношения один на один между двумя столбцами - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть два столбца A и B в кадре данных pandas, где значения повторяются несколько раз.Для уникального значения в A ожидается, что B также будет иметь «другое» уникальное значение.И каждому уникальному значению A соответствует соответствующее уникальное значение в B (см. Пример ниже в форме двух списков).Но поскольку каждое значение в каждом столбце повторяется несколько раз, я хотел бы проверить, существует ли какое-либо отношение один к одному между двумя столбцами или нет.Есть ли встроенная функция в пандах, чтобы проверить это?Если нет, есть ли эффективный способ решения этой задачи?

Пример:

A = [1, 3, 3, 2, 1, 2, 1, 1]
B = [5, 12, 12, 10, 5, 10, 5, 5]

Здесь для каждого 1 в A соответствующее значение в B всегда равно 5, и ничего больше.Аналогично для 2 -> 10 и для 3 -> 12.Следовательно, каждое число в A имеет только один / уникальный соответствующий номер в B (и не имеет другого числа).Я назвал это отношения один на один.Теперь я хочу проверить, существует ли такая связь между двумя столбцами в панде в кадре данных или нет.

Пример, где это соотношение не выполняется:

A = [1, 3, 3, 2, 1, 2, 1, 1]
B = [5, 12, 12, 10, 5, 10, 7, 5]

Здесь 1 в A не имеет уникального соответствующего значения в B. У него есть два соответствующих значения - 5 и 7.Следовательно, отношения не удовлетворены.

1 Ответ

0 голосов
/ 09 декабря 2018

Предположим, у вас есть какой-то фрейм данных:

 d = df({'A': [1, 3, 1, 2, 1, 3, 2], 'B': [4, 6, 4, 5, 4, 6, 5]})

d имеет метод groupby, который возвращает GroupBy объект .Это интерфейс для группировки некоторых строк по одинаковому значению столбца, например.

 gb = d.groupby('A')
 grouped_b_column = gb['B']

Для сгруппированных строк вы можете выполнить агрегирование.Давайте найдем минимальное и максимальное значение в каждой группе.

res = grouped_b_column.agg([np.min, np.max])

>>> print(res)
   amin  amax
A            
1     4     4
2     5     5
3     6     6

Теперь мы просто должны проверить, что amin и amax равны в каждой группе, поэтому каждая группа состоит из равных полей B:

res['amin'].equals(res['amax'])

Если эта проверка в порядке, то для каждого A у вас есть уникальный B.Теперь вы должны проверить те же критерии для A и B поменявшихся столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...