Pandasの「列の結合」について詳しく解説します。
結合といっても目的や方法によって使い分ける必要があります。
大きく分けると以下の種類があります。
目次
列同士を「文字列的に」結合する場合
例えば「姓」と「名」の列を一つの列にしたいときです。
import pandas as pd
# データ準備
df = pd.DataFrame({
"姓": ["田中", "佐藤", "鈴木"],
"名": ["太郎", "花子", "一郎"]
})
# シンプルに結合
df["氏名"] = df["姓"] + df["名"]
# 間にスペースを入れて結合
df["氏名_スペースあり"] = df["姓"] + " " + df["名"]
# 数値を文字列に変換して結合する場合の例
df["番号"] = [1, 2, 3]
df["名前_番号"] = df["姓"] + df["名"] + df["番号"].astype(str)
print(df)
ポイント
+
を使うと文字列として連結できます。- 間にスペースを入れたいときは
df["姓"] + " " + df["名"]
とします。 - 数値列を結合したい場合は
astype(str)
で文字列に変換してから結合します。
複数列をまとめて「1つの新しい列」に結合する場合
agg
や apply
を使う方法です。
import pandas as pd
# データ準備
df = pd.DataFrame({
"姓": ["田中", "佐藤", "鈴木"],
"名": ["太郎", "花子", "一郎"]
})
# aggで複数列をまとめる
df["氏名1"] = df[["姓", "名"]].agg("".join, axis=1)
# applyでフォーマットを自由に設定
df["氏名2"] = df.apply(lambda x: f"{x['姓']} {x['名']}", axis=1)
print(df)
列の「横方向の結合」(DataFrame同士を列単位でくっつける)
別のDataFrameにある列を結合したい場合です。
pd.concat
がよく使われます。
import pandas as pd
# データ準備
df1 = pd.DataFrame({"A": [1, 2, 3]})
df2 = pd.DataFrame({"B": ["x", "y", "z"]})
# 列方向に結合
df_concat = pd.concat([df1, df2], axis=1)
print(df_concat)
axis=1
を指定すると「列方向に結合」されます。- インデックスが揃っている場合にきれいに結合できます。
「キーを基準に結合」(SQLのJOINのようなイメージ)
merge
を使うと、共通のキーで結合できます。
import pandas as pd
# データ準備
df1 = pd.DataFrame({
"ID": [1, 2, 3],
"名前": ["田中", "佐藤", "鈴木"]
})
df2 = pd.DataFrame({
"ID": [1, 2, 4],
"年齢": [25, 30, 40]
})
# 内部結合 (共通するIDのみ)
df_inner = pd.merge(df1, df2, on="ID", how="inner")
# 左外部結合 (df1基準)
df_left = pd.merge(df1, df2, on="ID", how="left")
# 右外部結合 (df2基準)
df_right = pd.merge(df1, df2, on="ID", how="right")
# 完全外部結合 (両方のIDをすべて)
df_outer = pd.merge(df1, df2, on="ID", how="outer")
print("=== 内部結合 ===")
print(df_inner)
print("\n=== 左外部結合 ===")
print(df_left)
print("\n=== 右外部結合 ===")
print(df_right)
print("\n=== 完全外部結合 ===")
print(df_outer)
how
オプションの種類
"inner"
: 共通のキーのみ(SQLのINNER JOIN)"left"
: 左側のDataFrameを基準(LEFT JOIN)"right"
: 右側を基準(RIGHT JOIN)"outer"
: 両方にあるキーをすべて(FULL OUTER JOIN)
実務でよくある応用例
- 名前や住所の結合 (
姓 + " " + 名
,都道府県 + 市区町村
) - 異なるCSVから読み込んだデータを「ID」や「日付」でマージ
- 数値列を文字列に変換して「顧客コード-枝番」のように新しいIDを作成
まとめ
- 単純に文字列結合:
+
やagg("".join)
を使用 - DataFrameの横結合:
pd.concat(..., axis=1)
- キーを使った結合:
pd.merge(..., on="キー")
以上、PythonのPandasの列の結合についてでした。
最後までお読みいただき、ありがとうございました。