Рассчитать количество разных столбцов между строками в Pandas - PullRequest
0 голосов
/ 11 июня 2018

У меня есть DataFrame Pandas, заполненный различными данными.Некоторые из них являются категориальными данными (хранятся в DataFrame как тип объекта).

Я хочу вычислить количество полей (столбцов), в которых одна строка отличается от всех других строк.

Пример формы данных (столбцы с именами 'i', 'j', 'k'; первое число - индекс):

  i  j  k 
1 a  b  c
2 a  d  f
3 b  d  f
4 a  b  f

И дополнительная строка, с которой я хочу сравнить (index pro forma):

0 a b f

Результат, который я ищу, выглядит примерно так:

[1,1,2,0]

Поскольку 0 и 1 отличаются в «k», 0 и 2 отличаются в «j ', 0 и 3 различаются в' i 'и' j ', а 0 и 4. совсем не отличаются.

Я собираюсь делать это довольно часто, поэтому мне нужна быстрая версия.У меня уже есть тот, который делает это циклично, но это медленно;Мне нужно что-то быстрее, поэтому я пытаюсь найти векторизованную версию.

Обратите внимание, что в фрейме данных будут другие столбцы (числовые);предоставленные данные не упоминают их, но вы можете предположить, что будут некоторые другие столбцы (например, 'h', который будет содержать int64).Мы хотим игнорировать эти столбцы.

1 Ответ

0 голосов
/ 11 июня 2018

Трансляция, сравнение и суммирование результата:

diff = (df != np.array(['a', 'b', 'f'])).sum(1).tolist()

print(diff)
[1, 1, 2, 0]

Если ваши данные находятся в одной строке DataFrame s, тогда ваше решение будет выглядеть так:

df.ne(s.iloc[0].values, axis=1).sum(1).tolist()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...