pandas.core.resample.Resampler.min の解説
pandas.core.resample.Resampler.min の解説
pandas.core.resample.Resampler.min
は、pandas
ライブラリで データのグループごとの最小値を計算 するためのメソッドです。時間軸データの分析によく用いられ、例えば、株価データの過去1年間における各月の最安値を算出するといった用途に役立ちます。
基本的な使い方
import pandas as pd
# データフレームを作成
df = pd.DataFrame({'日付': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05'],
'株価': [100, 95, 102, 98, 101]})
# 月ごとに最小値を計算
df_resampled = df.resample('M').min()
print(df_resampled)
このコードを実行すると、以下の結果が出力されます。
株価
日付
2020-01-31 95
上記の例では、resample('M')
で月ごとのデータにリサンプリングを行い、min()
メソッドで各月の最小株価を計算しています。
オプション
min()
メソッドには、以下のオプションを指定することができます。
numeric_only
: Trueを設定すると、数値列のみを対象に最小値を計算します。デフォルトはFalseです。
# 数値列のみを対象に最小値を計算
df_resampled = df.resample('M').min(numeric_only=True)
応用例
- 株価データの過去n年間における各月の最安値を算出する
min()
メソッドは、欠損値を考慮した最小値を計算します。- 多重グループの場合は、各グループごとに最小値を計算します。
import pandas as pd
import datetime
# データフレームを作成
df = pd.DataFrame({'日付': [
'2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05',
'2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05',
'2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05'
],
'株価': [
100, 95, 102, 98, 101,
98, 96, 99, 103, 105,
102, 97, 100, 94, 96
]})
# 開始日と終了日を指定
start_date = datetime.datetime(2018, 1, 1)
end_date = datetime.datetime(2020, 1, 1)
# 過去n年間のデータに絞り込む
df_filtered = df[(df['日付'] >= start_date) & (df['日付'] <= end_date)]
# 月ごとに最小値を計算
df_resampled = df_filtered.resample('M').min()
print(df_resampled)
株価
日付
2018-01-31 95
2019-01-31 96
2020-01-31 94
上記コードでは、start_date
と end_date
で開始日と終了日を指定し、df_filtered
でその期間のデータに絞り込んでいます。その後、resample('M')
で月ごとにデータにリサンプリングを行い、min()
メソッドで各月の最小株価を計算しています。
import pandas as pd
# データフレームを作成
df = pd.DataFrame({'日付': [
'2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05',
'2014-01-01', '2014-01-02', '2014-01-03', '2014-01-04', '2014-01-05',
'2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04', '2015-01-05',
'2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04', '2016-01-05',
'2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05',
'2018-01-01', '2018-01-02', '2018-01-03', '2018-01-
apply()
関数は、データフレームの各行または列に対して関数を適用することができます。min()
関数を apply()
関数と組み合わせて、グループごとの最小値を計算することができます。
import pandas as pd
# データフレームを作成
df = pd.DataFrame({'日付': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05'],
'株価': [100, 95, 102, 98, 101]})
# 月ごとに最小値を計算
df_resampled = df.resample('M').apply(min)
print(df_resampled)
このコードは、pandas.core.resample.Resampler.min
と同じ結果を出力します。
groupby() 関数と min() 関数
import pandas as pd
# データフレームを作成
df = pd.DataFrame({'日付': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05'],
'株価': [100, 95, 102, 98, 101]})
# 月ごとに最小値を計算
df_resampled = df.groupby('日付')['株価'].min()
print(df_resampled)
.transform() 関数と min() 関数
import pandas as pd
# データフレームを作成
df = pd.DataFrame({'日付': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05'],
'株価': [100, 95, 102, 98, 101]})
# 月ごとに最小値を計算
df['株価_min'] = df.groupby('日付')['株価'].transform(min)
print(df)
このコードは、元のデータフレームに 株価_min
という新しい列を追加し、その列にグループごとの最小値を格納します。
NumPy の min() 関数
NumPy ライブラリの min()
関数を使用して、グループごとの最小値を計算することもできます。
import pandas as pd
import numpy as np
# データフレームを作成
df = pd.DataFrame({'日付': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05'],
'株価': [100, 95, 102, 98, 101]})
# 月ごとに最小値を計算
df_resampled = df.groupby('日付')['株価'].apply(np.min)
print(df_resampled)
どの代替方法を選択するべきか
どの代替方法を選択するべきかは、状況によって異なります。
- シンプルで分かりやすい方法を求める場合は、
apply()
関数または `groupby