静かなる名辞

pythonとプログラミングのこと


【python】pandasでDataFrameの平均と標準偏差を計算する方法

列の平均と標準偏差を計算したい

 とても簡単にできます。

>>> import pandas as pd
>>> df = pd.DataFrame([[1,2,3,4,5,6],
                       [6,5,4,3,2,1],
                       [0,1,2,3,4,5],
                       [5,4,3,2,1,0]], columns=[*"ABCDEF"])
>>> df.mean()
A    3.0
B    3.0
C    3.0
D    3.0
E    3.0
F    3.0
dtype: float64
>>> df.std()
A    2.943920
B    1.825742
C    0.816497
D    0.816497
E    1.825742
F    2.943920
dtype: float64

 何も考える必要はないのだった。

 リファレンス:
pandas.DataFrame.mean — pandas 0.24.2 documentation
pandas.DataFrame.std — pandas 0.24.2 documentation

行の平均と標準偏差を計算したい

 「転置しとけば?」という天の声が聞こえたのを無視してやります。

 numpy配列のようにaxisを指定するだけなのでこれも簡単です。

>>> import pandas as pd
>>> df = pd.DataFrame([[1,2,3,4,5,6],
                       [6,5,4,3,2,1],
                       [0,1,2,3,4,5],
                       [5,4,3,2,1,0]], columns=[*"ABCDEF"])
>>> df.mean(axis=1)
0    3.5
1    3.5
2    2.5
3    2.5
dtype: float64
>>> df.std(axis=1)
0    1.870829
1    1.870829
2    1.870829
3    1.870829
dtype: float64

 よくできてますね。

特定の列・行だけ取り出してから計算する

 基本的なindexing操作と組み合わせて使うことで、特定の行・列だけに対して計算するということも可能です。

 A, Bに対してのみ出力させたい場合。

>>> df[["A", "B"]].mean()
A    3.0
B    3.0
dtype: float64

describeメソッドで全体の雰囲気を掴む

 describeメソッドを使うと様々な統計量を勝手に出してくれます。

>>> df.describe()  # 列ごとに
             A         B         C         D         E        F
count  4.00000  4.000000  4.000000  4.000000  4.000000  4.00000
mean   3.00000  3.000000  3.000000  3.000000  3.000000  3.00000
std    2.94392  1.825742  0.816497  0.816497  1.825742  2.94392
min    0.00000  1.000000  2.000000  2.000000  1.000000  0.00000
25%    0.75000  1.750000  2.750000  2.750000  1.750000  0.75000
50%    3.00000  3.000000  3.000000  3.000000  3.000000  3.00000
75%    5.25000  4.250000  3.250000  3.250000  4.250000  5.25000
max    6.00000  5.000000  4.000000  4.000000  5.000000  6.00000
>>> df.T.describe()  # describeで行ごとに処理したい場合は転置する
              0         1         2         3
count  6.000000  6.000000  6.000000  6.000000
mean   3.500000  3.500000  2.500000  2.500000
std    1.870829  1.870829  1.870829  1.870829
min    1.000000  1.000000  0.000000  0.000000
25%    2.250000  2.250000  1.250000  1.250000
50%    3.500000  3.500000  2.500000  2.500000
75%    4.750000  4.750000  3.750000  3.750000
max    6.000000  6.000000  5.000000  5.000000

 参考:
pandas.DataFrame.describe — pandas 0.24.2 documentation
pandasのdescribeで各列の要約統計量(平均、標準偏差など)を取得 | note.nkmk.me