PythonのPandasの列の結合について

Python,イメージ

AI実装検定のご案内

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つの新しい列」に結合する場合

aggapply を使う方法です。

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の列の結合についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次