2015-03-24 16 views
6

Bei einem DataFrame möchte ich die Anzahl der Nullen pro Zeile berechnen. Wie kann ich es mit Pandas berechnen?Anzahl der Nullen pro Zeile von Pandas DataFrame?

Dies ist derzeit, was ich getan habe, diese Indizes von Nullen gibt

def is_blank(x): 
    return x == 0 

indexer = train_df.applymap(is_blank) 

Antwort

14

Verwenden Sie einen boolean Vergleich, die einen boolean df produzieren, können wir dann diese int gegossen, True 1 wird, falsch wird 0 und dann count aufrufen und übergeben param axis=1 zählen reihenweise:

In [56]: 

df = pd.DataFrame({'a':[1,0,0,1,3], 'b':[0,0,1,0,1], 'c':[0,0,0,0,0]}) 
df 
Out[56]: 
    a b c 
0 1 0 0 
1 0 0 0 
2 0 1 0 
3 1 0 0 
4 3 1 0 
In [64]: 

(df == 0).astype(int).sum(axis=1) 
Out[64]: 
0 2 
1 3 
2 2 
3 2 
4 1 
dtype: int64 

Breaking the oben nach unten:

In [65]: 

(df == 0) 
Out[65]: 
     a  b  c 
0 False True True 
1 True True True 
2 True False True 
3 False True True 
4 False False True 
In [66]: 

(df == 0).astype(int) 
Out[66]: 
    a b c 
0 0 1 1 
1 1 1 1 
2 1 0 1 
3 0 1 1 
4 0 0 1 

EDIT

wie von david der astype zu int nicht notwendig ist, wies darauf hin, wie die Boolean Typen int werden upcasted wird beim Aufruf sum so vereinfacht zu:

(df == 0).sum(axis=1) 
+1

Sie können die Booleschen Werte direkt summieren, da sie eine Unterklasse von 'int' sind. Also, '(df == 0) .sum (axis = 1)' erledigt den Job. – dschwertfeger

+0

@david ja das ist wahr, habe aktualisiert, danke – EdChum

2

Hier eine andere Lösung mit apply() und value_counts().

df = pd.DataFrame({'a':[1,0,0,1,3], 'b':[0,0,1,0,1], 'c':[0,0,0,0,0]}) 
df.apply(lambda s : s.value_counts().get(0,0), axis=1) 
Verwandte Themen