Панды находят уникальные записи в строке, игнорируя определенное число - PullRequest
0 голосов
/ 01 июля 2019

У меня есть простой набор данных, который я сохранил в пандах как фрейм данных. Я пытался в каждой строке измерить количество уникальных записей, игнорируя при этом число -1, если оно появляется.

Под добавленным столбцом к фрейму данных enter image description here

...

enter image description here

Я добавляю этот столбец, выполняя

pdSequences['unique']=pdSequences.apply(pd.Series.nunique, axis=1)

но, как видите, код работает не всегда корректно. Первая строка возвращает правильно, что уникальным является четыре (игнорируя последние два -1).

Если вы видите хотя бы строку 28, я хотел бы вернуть 5, но код возвращает 6.

Можете ли вы помочь мне понять, почему я получаю эти два разных типа поведения и как я могу считать уникальные записи (но игнорируя -1)?

Спасибо Alex

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Вы можете использовать

a[a!=-1].nunique(axis=1)

, чтобы игнорировать точные значения -1, или

a[a>-1].nunique(axis=1)

, чтобы игнорировать любое отрицательное значение.

1 голос
/ 01 июля 2019

Ваш код в настоящее время просто вычисляет количество уникальных записей в строке, потому что вы ничего не делаете, чтобы игнорировать -1. Вот как вы можете сделать это:

a = pd.DataFrame({'0':[58, 59, 60],
                 '1':[58, 60, -1],
                 '2':[-1, 61, -1]})
def myfunc(row):
    if -1 in row.values:
        return row.nunique() - 1
    else:
        return row.nunique()

a['unique'] = a.apply(myfunc, axis=1)
a

     0   1   2  unique
0   58  58  -1  1
1   59  60  61  3
2   60  -1  -1  1
...