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