Dado un dataframe, me gustaría calcular el número de ceros por cada fila. ¿Cómo puedo calcularlo con Pandas?
Esto es actualmente lo que he hecho, esto devuelve índices de ceros.
def is_blank(x): return x == 0 indexer = train_df.applymap(is_blank)
Use una comparación booleana que producirá un df booleano. Luego, podemos convertir esto en int, True se convierte en 1, False se convierte en 0 y luego se llama a la count
y se pasa param axis=1
para contar en la fila:
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]: abc 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
Romper lo de arriba hacia abajo:
In [65]: (df == 0) Out[65]: abc 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]: abc 0 0 1 1 1 1 1 1 2 1 0 1 3 0 1 1 4 0 0 1
EDITAR
como lo señaló david, el astype
a int
es necesario, ya que los tipos Boolean
se actualizarán a int
cuando se llama sum
por lo que esto se simplifica a:
(df == 0).sum(axis=1)
Aquí hay otra solución que utiliza apply()
y 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)