usar tutorial tablas sumar recorrer promedio para notebook leer funciones espaƱol documentacion datos data como columnas python python-2.7 pandas dataframe sum subtotal

python - tutorial - Obtener el total de la columna Pandas



sumar columnas pandas (4)

Objetivo

Tengo un marco de datos Pandas, como se muestra a continuación, con varias columnas y me gustaría obtener el total de la columna, MyColumn .

Marco de datos - df :

print df

X MyColumn Y Z 0 A 84 13.0 69.0 1 B 76 77.0 127.0 2 C 28 69.0 16.0 3 D 28 28.0 31.0 4 E 19 20.0 85.0 5 F 84 193.0 70.0

Mi intento :

groupby obtener la suma de la columna usando groupby y .sum() :

Total = df.groupby[''MyColumn''].sum() print Total

Esto provoca el siguiente error:

TypeError: ''instancemethod'' object has no attribute ''__getitem__''

Rendimiento esperado

Esperaba que el resultado fuera el siguiente:

319

O, alternativamente, me gustaría editar df con una nueva row titulada TOTAL contiene el total:

X MyColumn Y Z 0 A 84 13.0 69.0 1 B 76 77.0 127.0 2 C 28 69.0 16.0 3 D 28 28.0 31.0 4 E 19 20.0 85.0 5 F 84 193.0 70.0 TOTAL 319


Como otra opción, puedes hacer algo como a continuación

Group Valuation amount 0 BKB Tube 156 1 BKB Tube 143 2 BKB Tube 67 3 BAC Tube 176 4 BAC Tube 39 5 JDK Tube 75 6 JDK Tube 35 7 JDK Tube 155 8 ETH Tube 38 9 ETH Tube 56

Debajo del script, puede usar para los datos anteriores

import pandas as pd data = pd.read_csv("daata1.csv") bytreatment = data.groupby(''Group'') bytreatment[''amount''].sum()


Deberías usar sum :

Total = df[''MyColumn''].sum() print (Total) 319

Luego usa loc con Series , en ese caso el índice debe establecerse de la misma manera que la columna específica que necesita sumar:

df.loc[''Total''] = pd.Series(df[''MyColumn''].sum(), index = [''MyColumn'']) print (df) X MyColumn Y Z 0 A 84.0 13.0 69.0 1 B 76.0 77.0 127.0 2 C 28.0 69.0 16.0 3 D 28.0 28.0 31.0 4 E 19.0 20.0 85.0 5 F 84.0 193.0 70.0 Total NaN 319.0 NaN NaN

porque si pasa escalar, se completarán los valores de todas las filas:

df.loc[''Total''] = df[''MyColumn''].sum() print (df) X MyColumn Y Z 0 A 84 13.0 69.0 1 B 76 77.0 127.0 2 C 28 69.0 16.0 3 D 28 28.0 31.0 4 E 19 20.0 85.0 5 F 84 193.0 70.0 Total 319 319 319.0 319.0

Hay otras dos soluciones con at , y ix ve las aplicaciones a continuación:

df.at[''Total'', ''MyColumn''] = df[''MyColumn''].sum() print (df) X MyColumn Y Z 0 A 84.0 13.0 69.0 1 B 76.0 77.0 127.0 2 C 28.0 69.0 16.0 3 D 28.0 28.0 31.0 4 E 19.0 20.0 85.0 5 F 84.0 193.0 70.0 Total NaN 319.0 NaN NaN

df.ix[''Total'', ''MyColumn''] = df[''MyColumn''].sum() print (df) X MyColumn Y Z 0 A 84.0 13.0 69.0 1 B 76.0 77.0 127.0 2 C 28.0 69.0 16.0 3 D 28.0 28.0 31.0 4 E 19.0 20.0 85.0 5 F 84.0 193.0 70.0 Total NaN 319.0 NaN NaN

Nota: desde Pandas v0.20, ix ha quedado en desuso. Use loc o iloc en iloc lugar.


Otra opción con la que puedes ir aquí:

df.loc["Total", "MyColumn"] = df.MyColumn.sum() # X MyColumn Y Z #0 A 84.0 13.0 69.0 #1 B 76.0 77.0 127.0 #2 C 28.0 69.0 16.0 #3 D 28.0 28.0 31.0 #4 E 19.0 20.0 85.0 #5 F 84.0 193.0 70.0 #Total NaN 319.0 NaN NaN

También puede usar el método append() :

df.append(pd.DataFrame(df.MyColumn.sum(), index = ["Total"], columns=["MyColumn"]))

Actualizar:

En caso de que necesite agregar una suma para todas las columnas numéricas , puede realizar una de las siguientes acciones:

Utilice append para hacer esto de manera funcional (no cambia el marco de datos original):

# select numeric columns and calculate the sums sums = df.select_dtypes(pd.np.number).sum().rename(''total'') # append sums to the data frame df.append(sums) # X MyColumn Y Z #0 A 84.0 13.0 69.0 #1 B 76.0 77.0 127.0 #2 C 28.0 69.0 16.0 #3 D 28.0 28.0 31.0 #4 E 19.0 20.0 85.0 #5 F 84.0 193.0 70.0 #total NaN 319.0 400.0 398.0

Use loc para mutar el marco de datos en su lugar:

df.loc[''total''] = df.select_dtypes(pd.np.number).sum() df # X MyColumn Y Z #0 A 84.0 13.0 69.0 #1 B 76.0 77.0 127.0 #2 C 28.0 69.0 16.0 #3 D 28.0 28.0 31.0 #4 E 19.0 20.0 85.0 #5 F 84.0 193.0 70.0 #total NaN 638.0 800.0 796.0


Similar a obtener la longitud de un marco de datos, len(df) , lo siguiente funcionó para pandas y blaze:

Total = sum(df[''MyColumn''])

o alternativamente

Total = sum(df.MyColumn) print Total