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.