Je calcule des valeurs uniques, par ligne. Cependant, je veux exclure la valeur 0, puis calculer les uniques
col1 col2 col3 uniques 0 1 3 0 2 1 2 4 4 2 2 3 0 0 1
Sortie attendue
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
df.nunique (axis = 1 ) , cela inclut toutes les valeurs
3 Réponses :
Pour ce faire, vous pouvez simplement remplacer les zéros par des valeurs 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)
Essayez ceci:
def func(x):
s = set(x)
s.discard(0)
return len(s)
df['uniq'] = df.apply(lambda x: func(x), axis=1)
Une version légèrement plus concise sans utiliser replace:
col1 col2 col3 unique 0 1 3 0 2 1 2 4 4 2 2 3 0 0 1
Output:
df['unique'] = df[df!=0].nunique(axis=1) df