1. ホーム
  2. python

[解決済み] Pandasのカラムの合計を取得する

2022-04-24 23:01:59

質問

対象

以下のような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

解決方法は?

を使用する必要があります。 sum :

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

そして loc と共に Series この場合、インデックスは、合計する必要のある特定のカラムと同じになるように設定する必要があります。

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

なぜなら、scalar を渡すと、すべての行の値が埋められるからです。

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

他の2つの解決策は at ix は、以下のアプリケーションをご覧ください。

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 の代わりに