231 votes

Obtenir le total de la colonne Pandas

Cible

J'ai une Pandas trame de données, comme indiqué ci-dessous, avec plusieurs colonnes et voudrait obtenir le total de la colonne, MyColumn.


Bloc De Données - 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   

Ma tentative:

J'ai tenté d'obtenir la somme de la colonne à l'aide de groupby et .sum():

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

print Total

Cela provoque l'erreur suivante:

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

Sortie Attendue

J'avais attendu la sortie comme suit:

319

Ou sinon, je voudrais df être édité avec un nouveau row droit TOTAL contenant le 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

398voto

jezrael Points 290608

Vous devez utiliser sum:

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

Ensuite, vous utilisez loc avec Series, dans ce cas, l'indice devrait être la même que la colonne spécifique, vous devez somme:

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

parce que si vous passez scalaire, les valeurs de toutes les lignes seront remplies:

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

Deux autres solutions sont avec at, et ix voir les applications ci-dessous:

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

Note: Depuis les Pandas v0.20, ix a été supprimée. Utiliser loc ou iloc à la place.

42voto

Psidom Points 115100

Une autre option que vous pouvez aller ici:

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

Vous pouvez également utiliser append() méthode:

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

enter image description here


Mise à jour:

Dans le cas où vous avez besoin pour ajouter de la somme pour toutes les numériques colonnes, vous pouvez effectuer l'une des opérations suivantes:

Utiliser append à le faire de manière fonctionnelle (ne pas changer le bloc de données):

# 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

Utiliser loc de muter bloc de données en place:

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

12voto

Jeff Crites Points 31

Comme pour obtenir la longueur d'une trame de données, len(df) , les éléments suivants ont fonctionné pour les pandas et les flammes:

 Total = sum(df['MyColumn'])
 

Ou bien

 Total = sum(df.MyColumn)
print Total
 

2voto

Ghanshyam Points 58

Comme autre option, vous pouvez faire quelque chose comme ci-dessous

 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
 

Sous le script, vous pouvez utiliser pour les données ci-dessus

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X