Pythonでのsumの使い方とは?listやdataframeなどの合計を計算する方法を紹介

- システム
エンジニア - Pythonでのsumの使い方について教えてください。
- プロジェクト
マネージャー - listや配列、dataframeなどの合計を計算できるsumについてご紹介しましょう。
Pythonでのsumの使い方とは?
今回は、Pythonでのsumの使い方について説明します。sumを使用すれば、listや配列、dataframeなどの合計を計算できます。また、条件式として使用することもできます。
Pythonでのsumの使い方に興味のある方はぜひご覧ください。
list
Pythonでのlistの合計について紹介します。フィルターした要素のみの合計もできます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
mylist = list(range(1, 11))
print(mylist)
# 合計
print(sum(mylist)) # 55
# mylistの合計に11を加算
print(sum(mylist, 11)) # 66
# listのindex3以上5未満の合計(この場合4+5)
print(sum(mylist[3:5])) # 9
# 偶数要素だけ合計(2+4+6+8+10 = 30)
print(sum(filter(lambda x: x % 2 == 0, mylist))) # 30
# 奇数要素だけ合計(1+3+5+7+9 = 25)
print(sum(filter(lambda x: x % 2 == 1, mylist))) # 25
# 7以上の要素だけ合計(7+8+9+10 = 34)
print(sum(filter(lambda x: x >= 7, mylist))) # 34
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
55
66
9
30
25
34
|
このようにPythonでは、sumを使ってlistの合計が計算できます。
listの連結
Pythonでは、sumを使えばlistの連結ができます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
|
mylist = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
# listの連結
print(sum(mylist, [])) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 連結したlistの合計
print(sum(sum(mylist, []))) # 55
# listの連結(先頭に[0]を追加)
print(sum(mylist, [0])) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 連結したlistの合計
print(sum(sum(mylist, [0]))) # 55
|
実行結果は以下のようになります。
1
2
3
4
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
55
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
55
|
sumは要素を連続して処理できるので、listの連結ができるということです。
条件式
Pythonでは、sumを条件式として使うこともできます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
def func(n):
print(str(n) + ":", end='')
# 0以上 10未満 偶数 の条件を満たす数を出力
print(sum([n >= 0, n < 10, n % 2 == 0]))
for i in range(15):
func(i)
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
0:3
1:2
2:3
3:2
4:3
5:2
6:3
7:2
8:3
9:2
10:2
11:1
12:2
13:1
14:2
|
いくつの条件に一致したのかを計算できるので、条件をN個以上満たす場合の処理などを実現できます。このようにPythonでは、sumを条件式として使うこともできます。
配列
numpyを使った多次元配列のsumの方法について紹介します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import numpy as np
# 1次元配列
myarray = np.array([1, 2, 3, 4, 5])
print(np.sum(myarray)) # 15
# 2次元配列
myarray2 = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(np.sum(myarray2)) # 55
# 列方向の合計
print(np.sum(myarray2, axis=0)) # [ 7 9 11 13 15]
# 行方向の合計
print(np.sum(myarray2, axis=1)) # [15 40]
# 3次元配列
myarray3 = np.array([[
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]],
[[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]]])
print(np.sum(myarray3)) # 210
# 奥行方向の合計
print(np.sum(myarray3, axis=0))
# [[12 14 16 18 20]
# [22 24 26 28 30]]
# 列方向の合計
print(np.sum(myarray3, axis=1))
#[[ 7 9 11 13 15]
# [27 29 31 33 35]]
# 行方向の合計
print(np.sum(myarray3, axis=2))
#[[15 40]
# [65 90]]
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
|
15
55
[ 7 9 11 13 15]
[15 40]
210
[[12 14 16 18 20]
[22 24 26 28 30]]
[[ 7 9 11 13 15]
[27 29 31 33 35]]
[[15 40]
[65 90]]
|
このようにPythonでは、numpyを使った多次元配列の合計を計算できます。
dataframe
Pythonでのdataframeのsumの方法について紹介します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import pandas as pd
# データの作成(クラス、氏名、教科(国語、数学、英語)の点数)
data_frame =\
pd.DataFrame([["classA","classA","classA","classB","classB","classB"],
["nameA","nameB","nameC","nameD","nameE","nameF"],
[100,90,80,60,60,70],
[100,80,70,50,40,50],
[100,80,90,80,60,80]] ).T
# カラム名とインデックス名を付与
data_frame.columns = ["class","name","japanese","mathematics","english"]
data_frame.index = ["nameA","nameB","nameC","nameD","nameE","nameF"]
# 教科ごとの合計
print(data_frame["japanese"].sum(axis=0)) # 460
print(data_frame["mathematics"].sum(axis=0)) # 390
print(data_frame["english"].sum(axis=0)) # 490
print(data_frame[["japanese","mathematics","english"]].sum(axis=0))
# japanese 460.0
# mathematics 390.0
# english 490.0
# dtype: float64
# 個人ごとの合計
print(data_frame[["japanese","mathematics","english"]].sum(axis=1))
# nameA 300.0
# nameB 250.0
# nameC 240.0
# nameD 190.0
# nameE 160.0
# nameF 200.0
# dtype: float64
# グループ化
data_frame_grouped = data_frame.groupby("class")
# クラスごと、教科ごとの合計
print(data_frame_grouped[["japanese","mathematics","english"]].sum())
# japanese mathematics english
# class
# classA 270 250 270
# classB 190 140 220
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
460
390
490
japanese 460.0
mathematics 390.0
english 490.0
dtype: float64
nameA 300.0
nameB 250.0
nameC 240.0
nameD 190.0
nameE 160.0
nameF 200.0
dtype: float64
japanese mathematics english
class
classA 270 250 270
classB 190 140 220
|
- システム
エンジニア - よく分かりました。ありがとうございます。
- プロジェクト
マネージャー - Pythonでのsumは条件式としても使用できます。
まとめ
いかがでしたでしょうか。Pythonでのsumの使い方について説明しました。sumを使用すれば、listや配列、dataframeなどの合計を計算できます。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Python新着案件New Job
-
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都豊島区(池袋駅) -
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都豊島区(池袋駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅)