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 en utilisant groupby
et .sum()
:
Total = df.groupby['MyColumn'].sum()
print Total
c'est Ce qui provoque l'erreur suivante:
TypeError: 'instancemethod' object has no attribute '__getitem__'
Résultats Escomptés
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
4 réponses
Vous devez utiliser sum
:
Total = df['MyColumn'].sum()
print (Total)
319
puis vous utilisez loc
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 remplis:
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 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
Remarque: depuis Pandas v0.20,ix
a été désapprouvée. Utilisez loc
ou iloc
à la place.
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 aussi utiliser append()
méthode:
df.append(pd.DataFrame(df.MyColumn.sum(), index = ["Total"], columns=["MyColumn"]))
mise à Jour:
Dans le cas où vous avez besoin pour ajouter de la somme pour tous les numérique colonnes, vous pouvez effectuer l'une des opérations suivantes:
Utiliser append
le faire de manière fonctionnelle (ne change pas les données originales frame):
# 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
pour muter bloc de données à la 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
semblable à obtenir la longueur d'une dataframe,len(df)
la suite travaillé pour les pandas et blaze:
Total = sum(df['MyColumn'])
ou sinon
Total = sum(df.MyColumn)
print Total
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
script ci-dessous, 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()