Python
pandas

DataFrame に複数列を使って計算列を高速に加える方法

概要

DataFrame に複数列を使って関数やハッシュマップを通して値をセットする場合、iterrows() を使ってしまうと遅い。シリーズ同士の計算にもっていくこと。

説明

DataFrame に単一列を使って追加する場合、下記のようにやれば高速。

df['z'] = df.a + 100

ただ、複数列を使って列を追加しないといけない場合に iterrows() を使って下記のようにやってしまうととても遅い。

遅い
max_for_each_b = {1: 100, 2: 200, 3:500}
df['z'] = [v.a / max_for_each_a[v.b] for i, v in df.iterrows()]

このような場合は下記のようにシリーズ同士の計算にもっていけば高速。

速い
max_for_each_b = {1: 100, 2: 200, 3:500}
df['z'] = df.a / df.b.apply(lambda b: max_for_each_b[b])