web-dev-qa-db-ja.com

Pandas列の合計を取得する

ターゲット

以下に示すように、複数の列を持つPandasデータフレームがあり、列の総数MyColumnを取得したいと思います。


データフレーム - 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   

私の試み

groupby.sum()を使用して列の合計を取得しようとしました。

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

print Total

これにより、次のエラーが発生します。

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

予想される出力

出力は次のようになるはずです。

319

あるいは、dfを合計を含むrowという新しい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
68
LearningToJava

sum :を使うべきです。

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

次に、 locSeriesと共に使用します。その場合、インデックスは合計する必要がある特定の列と同じに設定する必要があります。

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

スカラを渡すと、すべての行の値が埋められるからです。

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

at 、および ix を使用する方法が他に2つあります。以下のアプリケーションを参照してください。

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

注: Pandas v0.20以降、ixは推奨されなくなりました。代わりにlocまたはilocを使用してください。

127
jezrael

あなたがここで行くことができるもう一つの選択肢:

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

append()メソッドを使うこともできます。

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

enter image description here


更新:

すべての numeric 列にsumを追加する必要がある場合は、次のいずれかを実行できます。

機能的にこれを行うにはappendを使用します(元のデータフレームは変更しません)。

# 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

データフレームを適切な位置に変更するには、locを使用します。

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
14
Psidom

データフレームの長さlen(df)を取得するのと同じように、以下はパンダとブレイズのために働きました:

Total = sum(df['MyColumn'])

または代わりに

Total = sum(df.MyColumn)
print Total
4
Jeff Crites