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_dateend_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