nunique, исключая некоторые значения в пандах - PullRequest
2 голосов
/ 09 марта 2019

Я рассчитываю уникальные значения для каждой строки.Однако я хочу исключить значение 0 и затем рассчитать уникальные значения

d = {'col1': [1, 2, 3], 'col2': [3, 4, 0], 'col3': [0, 4, 0],}
df = pd.DataFrame(data=d)
df

    col1    col2    col3
0   1       3       0
1   2       4       4
2   3       0       0

Ожидаемый результат

    col1    col2    col3    uniques
0   1       3       0       2
1   2       4       4       2
2   3       0       0       1

df.nunique(axis = 1), включая все значения

Ответы [ 3 ]

4 голосов
/ 09 марта 2019

Для этого вы можете просто заменить нули значениями Nan.

import pandas as pd
import numpy as np
d = {'col1': [1, 2, 3], 'col2': [3, 4, 0], 'col3': [0, 4, 0]}
df = pd.DataFrame(data=d)
df['uniques'] =  df.replace(0, np.NaN).nunique(axis=1)
1 голос
/ 09 марта 2019

Немного более краткая версия без использования replace:

df['unique'] = df[df!=0].nunique(axis=1)
df

Вывод:

   col1  col2  col3  unique
0     1     3     0       2
1     2     4     4       2
2     3     0     0       1
1 голос
/ 09 марта 2019

Попробуйте это:

def func(x):
    s = set(x)
    s.discard(0)
    return len(s)

df['uniq'] = df.apply(lambda x: func(x), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...