Pythonの以下のようなコードでワーニングが発生しました。
コード
df[col+'_max'] = df.groupby(['A','B','C'])[col].transform(max)
ワーニング
FutureWarning: The provided callable <built-in function max> is currently using SeriesGroupBy.max. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string “max” instead.
ワーニングの解消
ワーニングは、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メソッドがより汎用的になり、カスタム関数やラムダ式など、組み込み関数以外の関数も簡単に使用できるようになります。しかし、既存のコードの挙動が変わる可能性があるため、コードを適宜更新しておく必要があるようです。
また、組み込み関数やユーザー定義関数を使用する際には、その関数が期待する形式でデータを処理する責任がユーザーに移ると考えられます。

