Pandasでのデータフレームのマージ操作ガイド

Pandasにおけるデータフレームのマージ操作について解説します。データベース処理にも類似した手法が用いられ、複数のキーカラムをもとにした結合が可能です。

単一キーによるマージ


import pandas as pd

# サンプルデータの作成
df1 = pd.DataFrame({
    'id': ['X0', 'X1', 'X2', 'X3'],
    'value_a': ['A0', 'A1', 'A2', 'A3'],
    'value_b': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'id': ['X0', 'X1', 'X2', 'X3'],
    'value_c': ['C0', 'C1', 'C2', 'C3'],
    'value_d': ['D0', 'D1', 'D2', 'D3']
})

# idカラムをもとにマージ
merged_df = pd.merge(df1, df2, on='id')
print(merged_df)

複数キーによるマージ


import pandas as pd

# サンプルデータの作成
df1 = pd.DataFrame({
    'key1': ['K0', 'K0', 'K1', 'K2'],
    'key2': ['K0', 'K1', 'K0', 'K1'],
    'value_x': ['X0', 'X1', 'X2', 'X3']
})

df2 = pd.DataFrame({
    'key1': ['K0', 'K1', 'K1', 'K2'],
    'key2': ['K0', 'K0', 'K0', 'K0'],
    'value_y': ['Y0', 'Y1', 'Y2', 'Y3']
})

# 内部結合
inner_merge = pd.merge(df1, df2, on=['key1', 'key2'], how='inner')
print(inner_merge)

# 外部結合
outer_merge = pd.merge(df1, df2, on=['key1', 'key2'], how='outer')
print(outer_merge)

# 左結合
left_merge = pd.merge(df1, df2, on=['key1', 'key2'], how='left')
print(left_merge)

# 右結合
right_merge = pd.merge(df1, df2, on=['key1', 'key2'], how='right')
print(right_merge)

マージインジケーターの使用


import pandas as pd

# サンプルデータの作成
df_a = pd.DataFrame({
    'category': ['A', 'B', 'C'],
    'value': [10, 20, 30]
})

df_b = pd.DataFrame({
    'category': ['B', 'C', 'D'],
    'value': [25, 35, 45]
})

# マージインジケーターを含む結合
merged_with_indicator = pd.merge(
    df_a, df_b, 
    on='category', 
    how='outer', 
    indicator='source'
)
print(merged_with_indicator)

インデックスを用いたマージ


import pandas as pd

# インデックス付きデータフレームの作成
df1 = pd.DataFrame({
    'score': [80, 90, 75]
}, index=['S001', 'S002', 'S003'])

df2 = pd.DataFrame({
    'grade': ['A', 'B', 'C']
}, index=['S001', 'S002', 'S004'])

# インデックスをもとにしたマージ
merged_index = pd.merge(
    df1, df2, 
    left_index=True, 
    right_index=True, 
    how='outer'
)
print(merged_index)

重複カラムの解決


import pandas as pd

# 重複カラムを持つデータフレーム
df_students = pd.DataFrame({
    'student_id': ['S001', 'S002', 'S003'],
    'age': [20, 21, 19]
})

df_enrollment = pd.DataFrame({
    'student_id': ['S001', 'S001', 'S004'],
    'age': [22, 23, 20]
})

# サフィックスで重複を解決
merged_data = pd.merge(
    df_students, 
    df_enrollment, 
    on='student_id', 
    suffixes=('_base', '_enrolled')
)
print(merged_data)

タグ: Pandas data-merging DataFrame sql-join

8月17日 07:15 投稿