以下に示すように、複数の列を持つ Pandas データ フレームがあり、列の合計を取得したいと考えていますMyColumn
。
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
期待される出力
出力は次の列の合計になるはずです: 319
。
または、合計を含むdf
タイトルの新しい行を編集したいとします。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
groupby
およびを使用して列の合計を取得しようとしました.sum()
:
Total = df.groupby['MyColumn'].sum()
これにより、次のエラーが発生します。
TypeError: 'instancemethod' object has no attribute '__getitem__'
ベストアンサー1
以下を使用する必要があります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
スカラーを渡すと、すべての行の値が入力されるためです。
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
。