pandasで複数のデータをマージする方法を解説します。
データをマージする
データセット
import pandas as pd
from sklearn.datasets import load_iris
iris_data = load_iris()
df = pd.DataFrame(
data = iris_data.data,
columns = iris_data.feature_names,
)
df["label"] = iris_data.target
df
load_irisデータを使います。”label”は花の種類です。
データのマージ
group_mean = df.groupby("label", as_index = False)["sepal length (cm)"].mean()
group_mean
# ===== output =====
# 0 0 5.006
# 1 1 5.936
# 2 2 6.588
ラベルごとに”sepal length”の平均値を計算しました。この結果をもとのデータにマージしましょう。
df.merge(group_mean, on = "label", how = "left")
# ===== output =====
# 0 5.1 3.5 1.4 0.2 0 5.006
# 1 4.9 3.0 1.4 0.2 0 5.006
# 2 4.7 3.2 1.3 0.2 0 5.006
# 3 4.6 3.1 1.5 0.2 0 5.006
# 4 5.0 3.6 1.4 0.2 0 5.006
mergeでくっつけます。
onで指定した列を参照しており、上記では”label”に対応した値が新しく加わります。
howには”left”, “right”, “inner”など色々ありますが、基本的に”left”です。
これは元のデータ(上記はdf)の行数を保持してマージする操作になります。
pd.merge(df, group_mean, on = "label", how = "left")
# ===== output =====
# 0 5.1 3.5 1.4 0.2 0 5.006
# 1 4.9 3.0 1.4 0.2 0 5.006
# 2 4.7 3.2 1.3 0.2 0 5.006
# 3 4.6 3.1 1.5 0.2 0 5.006
# 4 5.0 3.6 1.4 0.2 0 5.006
こんな感じで、pd.mergeと書く方法もあります。
()にくっつけたいデータを2つとも入れましょう。
ちなみに、くっつける際に参照する列を2つ以上にしたい場合、on = [“列1”, “列2”]のように書きます。
まとめ
mergeで複数のデータをくっつける方法を解説しました。
onとhowで結合する条件を指定すればOKですね。
コメント