Saltar al contenido

¿Cómo sumo valores en una columna que coinciden con una condición dada usando pandas?

La guía o código que hallarás en este post es la resolución más rápida y válida que hallamos a tu duda o dilema.

Solución:

La idea esencial aquí es seleccionar los datos que desea sumar y luego sumarlos. Esta selección de datos se puede hacer de varias maneras diferentes, algunas de las cuales se muestran a continuación.

indexación booleana

Podría decirse que la forma más común de seleccionar los valores es usar la indexación booleana.

Con este método, averigua dónde la columna ‘a’ es igual a 1 y luego sume las filas correspondientes de la columna ‘b’. Puedes usar loc para manejar la indexación de filas y columnas:

>>> df.loc[df['a'] == 1, 'b'].sum()
15

La indexación booleana se puede extender a otras columnas. por ejemplo si df también contenía una columna ‘c’ y queríamos sumar las filas en ‘b’ donde ‘a’ era 1 y ‘c’ era 2, escribiríamos:

df.loc[(df['a'] == 1) & (df['c'] == 2), 'b'].sum()

Consulta

Otra forma de seleccionar los datos es usar query para filtrar las filas que le interesan, seleccione la columna ‘b’ y luego sume:

>>> df.query("a == 1")['b'].sum()
15

Nuevamente, el método se puede extender para hacer selecciones más complicadas de los datos:

df.query("a == 1 and c == 2")['b'].sum()

Tenga en cuenta que esto es un poco más conciso que el enfoque de indexación booleana.

Agrupar por

El enfoque alternativo es utilizar groupby para dividir el DataFrame en partes según el valor de la columna ‘a’. Luego puede sumar cada parte y extraer el valor que sumaron los 1:

>>> df.groupby('a')['b'].sum()[1]
15

Es probable que este enfoque sea más lento que usar la indexación booleana, pero es útil si desea verificar las sumas para otros valores en la columna a:

>>> df.groupby('a')['b'].sum()
a
1    15
2     8

También puede hacer esto sin usar groupby o loc. Simplemente incluyendo la condición en el código. Deje que el nombre del marco de datos sea df. Entonces puedes probar:

df[df['a']==1]['b'].sum()

o también puedes probar:

sum(df[df['a']==1]['b'])

Otra forma podría ser usar la biblioteca numpy de python:

import numpy as np
print(np.where(df['a']==1, df['b'],0).sum())

Sección de Reseñas y Valoraciones

Recuerda dar difusión a esta noticia si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *