スポンサーリンク

ワーニング解消 FutureWarning: The provided callable is currently using SeriesGroupBy.max.

記事内に広告が含まれています。

Pythonの以下のようなコードでワーニングが発生しました。

コード

df[col+'_max'] = df.groupby(['A','B','C'])[col].transform(max)

ワーニング

ワーニングの解消

ワーニングは、Pandasの将来のバージョンでgroupbyに対してtransformメソッドを使用する際の挙動が変更されることを警告しています。現在のバージョンでは、transformメソッドに組み込み関数のmaxを直接渡すと、自動的にSeriesGroupBy.maxが使用されますが、将来のバージョンではmax関数が直接使用されるようです。

以下のように、transformメソッドにmax関数を文字列として渡すように変更するとワーニングが発生しなくなりました。

df[col+'_max'] = df.groupby(['A','B','C'])[col].transform('max')

現在の挙動

現在のPandasでは、groupbyオブジェクトに対してtransformメソッドを使用する際に、Pythonの組み込み関数(例えばmax)を直接渡すと、Pandasはその関数に対応する自身の集約関数を内部で使用します。つまり、maxを渡すと、Pandasは各グループに対して自動的にSeriesGroupBy.maxメソッドを呼び出します。

将来の挙動

将来のPandasのバージョンでは、transformメソッドに渡された関数(本記事の例ではmax)が、そのまま直接各グループに適用されるようになります。つまり、Pandasが自動的に対応する集約関数に変換するのではなく、提供された関数そのものが各グループのデータに対して実行されることを意味します。

この変更により、Pandasのtransformメソッドがより汎用的になり、カスタム関数やラムダ式など、組み込み関数以外の関数も簡単に使用できるようになります。しかし、既存のコードの挙動が変わる可能性があるため、コードを適宜更新しておく必要があるようです。

また、組み込み関数やユーザー定義関数を使用する際には、その関数が期待する形式でデータを処理する責任がユーザーに移ると考えられます。

スポンサーリンク
Python
著者SNS
タイトルとURLをコピーしました