ターゲット
以下に示すように、複数の列を持つ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
スカラを渡すと、すべての行の値が埋められるからです。
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
を使用してください。
あなたがここで行くことができるもう一つの選択肢:
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"]))
更新:
すべての 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
データフレームの長さlen(df)
を取得するのと同じように、以下はパンダとブレイズのために働きました:
Total = sum(df['MyColumn'])
または代わりに
Total = sum(df.MyColumn)
print Total