applyを使って行または列ごとに処理を実行する方法を解説します。
行(列)ごとに処理をする
データセット
import pandas as pd
from sklearn.datasets import load_diabetes
data = load_diabetes()
df = pd.DataFrame(
data = data.data,
columns = data.feature_names,
)
df["target"] = data.target
df
load_diabetesのデータセットを使います。
列ごとに処理をする
df["bmi"].apply(lambda x: int(x * 1000))
# ===== output =====
# 0 61
# 1 -51
# 2 44
# 3 -11
# ...
apply(lambda x: 処理)で指定した列に対して処理を実行します。
上記コードは、”bmi”を1000倍して整数にしています。
df["bmi_1000"] = df["bmi"].apply(lambda x: int(x * 1000))
こうすると処理結果を新しい列として追加できます。
行ごとに処理をする
df.apply(lambda x: x.s1 + x.s2 + x.s3 + x.s4 + x.s5 + x.s6, axis = 1)
# ===== output =====
# 0 -0.122776
# 1 -0.153229
# 2 -0.137811
# 3 0.048778
# 4 -0.053548
# ...
axis = 1にすると、行(横方向)に対して処理をします。例えばx.s1は”s1″の各行の値です。
上記コードは”s1~s6″をすべて足した結果となります。
また、x.s1の変わりにx[“s1”]と表記してもOKです。
まとめ
今回はapplyを使って行または列ごとに処理を実行する方法を解説しました。
特にaxis = 1にしたときの処理は一括で書けて便利です。
注意点として、計算時間が膨大になることがあるので、複雑な処理を書きたいなら単純にfor文で各行の処理をした方が良いこともあります。
コメント