pandasで中央値を取得するmedian
pandas.DataFrame
, pandas.Series
の中央値(1/2分位数、50パーセンタイル)を取得するにはmedian()
メソッドを使う。
中央値の定義は以下の通り。
中央値(ちゅうおうち、英: median)とは、代表値の一つで、有限個のデータを小さい順に並べたとき中央に位置する値。
...
データが偶数個の場合は、中央に近い2つの値の算術平均をとる。
中央値 - Wikipedia
ここでは以下の内容について説明する
median()
の基本的な使い方- 行数・要素数が偶数の場合
- 行・列を指定: 引数
axis
中央値を含む様々な要約統計量を算出するメソッドdescribe()
もある。データの概観をつかむためならこちらのほうが便利。
また、中央値は1/2分位数、50パーセンタイルであるが、任意の分位数・パーセンタイルを取得したい場合はquantile()
を使う。
median()の基本的な使い方
以下のpandas.DataFrame
を例とする。
import pandas as pd
df = pd.DataFrame({'col_1': range(5),
'col_2': [i ** 2 for i in range(5)],
'col_3': list('abcde')})
print(df)
# col_1 col_2 col_3
# 0 0 0 a
# 1 1 1 b
# 2 2 4 c
# 3 3 9 d
# 4 4 16 e
source: pandas_median.py
デフォルトでは数値列の中央値をpandas.Series
で返す。数値以外の列は無視される。
print(df.median())
# col_1 2.0
# col_2 4.0
# dtype: float64
print(type(df.median()))
# <class 'pandas.core.series.Series'>
source: pandas_median.py
pandas.Series
からmedian()
を呼んだ場合はその中央値が浮動小数点数float
で返される。
print(df['col_1'].median())
# 2.0
print(type(df['col_1'].median()))
# <class 'numpy.float64'>
source: pandas_median.py
行数・要素数が偶数の場合
上の例のように行数・要素数が奇数であれば中央の値がそのまま返される。
行数・要素数が偶数の場合は中央2つの値の平均値が返される。
df_even = pd.DataFrame({'col_1': range(6),
'col_2': [i ** 2 for i in range(6)],
'col_3': list('abcdef')})
print(df_even)
# col_1 col_2 col_3
# 0 0 0 a
# 1 1 1 b
# 2 2 4 c
# 3 3 9 d
# 4 4 16 e
# 5 5 25 f
print(df_even.median())
# col_1 2.5
# col_2 6.5
# dtype: float64
source: pandas_median.py
行・列を指定: 引数axis
デフォルトは列ごとに処理されるが、引数axis=1
とすると行ごとの処理となる。この場合も数値以外の列は無視される。
print(df)
# col_1 col_2 col_3
# 0 0 0 a
# 1 1 1 b
# 2 2 4 c
# 3 3 9 d
# 4 4 16 e
source: pandas_median.py
print(df.median(axis=1))
# 0 0.0
# 1 1.0
# 2 3.0
# 3 6.0
# 4 10.0
# dtype: float64
source: pandas_median.py