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)
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
@david ja das ist wahr, habe aktualisiert, danke – EdChum