Traffine I/O

日本語

2022-11-15

Pandasにおけるデータフレームのマージ、連結、結合

はじめに

データの操作は、データサイエンティストやアナリストにとって重要なスキルであり、さまざまなデータ操作タスクを簡素化する柔軟なツールであるPandasライブラリがPythonで広く使用されています。この記事では、Pandasにおけるデータフレームを結合するための3つの基本的なテクニックであるマージ、連結、結合について解説します。

データフレームのマージ

マージは、列の値に基づいて2つのデータフレームを結合するための技術です。Pandasのマージ関数を使用することで、inner、outer、left、rightなどの異なる種類の結合を実行できます。この章では、それぞれの結合タイプとその応用について説明します。

Inner Merge

Inner Mergeは、inner joinとも呼ばれ、両方のデータフレームでキーが一致する行のみを返します。これは、Pandasのデフォルトの結合タイプです。Inner Mergeを実行するには、pd.merge()関数を使用します。

python
import pandas as pd

# Sample DataFrames
data1 = {'key': ['A', 'B', 'C', 'D'],
         'value': [1, 2, 3, 4]}
data2 = {'key': ['B', 'D', 'E', 'F'],
         'value': [5, 6, 7, 8]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# Inner Merge
merged_df = pd.merge(df1, df2, on='key', suffixes=('_df1', '_df2'))
print(merged_df)
  key  value_df1  value_df2
0   B          2          5
1   D          4          6

Outer Merge

Outer Mergeは、outer joinとも呼ばれ、両方のデータフレームから全ての行を返します。片方のデータフレームにキーが存在しない場合、欠損値NaNで値を埋めます。Outer Mergeを実行するには、howパラメータを'outer'として指定する必要があります。

python
# Outer Merge
merged_df = pd.merge(df1, df2, on='key', how='outer', suffixes=('_df1', '_df2'))
print(merged_df)
  key  value_df1  value_df2
0   A        1.0        NaN
1   B        2.0        5.0
2   C        3.0        NaN
3   D        4.0        6.0
4   E        NaN        7.0
5   F        NaN        8.0

Left Merge

Left Mergeは、left joinとも呼ばれ、左側のデータフレームの全ての行と、右側のデータフレームとマッチする行を返します。マッチしない場合はNaN値が使用されます。Left Mergeを実行するには、howパラメータを'left'として指定する必要があります。

python
# Left Merge
merged_df = pd.merge(df1, df2, on='key', how='left', suffixes=('_df1', '_df2'))
print(merged_df)
  key  value_df1  value_df2
0   A          1        NaN
1   B          2        5.0
2   C          3        NaN
3   D          4        6.0

Right Merge

Right Mergeは、right joinとも呼ばれ、右側のデータフレームの全ての行と、左側のデータフレームとマッチする行を返します。マッチしない場合はNaN値が使用されます。Right Mergeを実行するには、howパラメータを'right'として指定する必要があります。

python
# Right Merge
merged_df = pd.merge(df1, df2, on='key', how='right', suffixes=('_df1', '_df2'))
print(merged_df)
  key  value_df1  value_df2
0   B        2.0          5
1   D        4.0          6
2   E        NaN          7
3   F        NaN          8

データフレームの連結

連結は、特定の軸(行または列)を沿ってデータフレームを端から端まで結合するプロセスです。マージとは異なり、連結は列の値の一致に依存しません。代わりに、単純にデータフレームを追加します。この章では、Pandasを使用して行および列に沿ってデータフレームを連結する方法について説明します。

行に沿った連結

データフレームを行に沿って連結するには、pd.concat()関数を使用します。デフォルトでは、関数は行に沿って連結します(axis=0)。以下は例です。

python
import pandas as pd

# Sample DataFrames
data1 = {'A': [1, 2, 3],
         'B': [4, 5, 6]}
data2 = {'A': [7, 8, 9],
         'B': [10, 11, 12]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# Concatenation along rows
concatenated_df = pd.concat([df1, df2], ignore_index=True)
print(concatenated_df)
   A   B
0  1   4
1  2   5
2  3   6
3  7  10
4  8  11
5  9  12

上記の例では、ignore_indexパラメータがTrueに設定されており、結果のデータフレームのインデックスを再設定しています。Falseに設定されている場合は、元のインデックス値が保持されます。

列に沿った連結

データフレームを列に沿って連結するには、pd.concat()関数でaxisパラメータを1として指定する必要があります。

python
# Sample DataFrames
data1 = {'A': [1, 2, 3],
         'B': [4, 5, 6]}
data2 = {'C': [7, 8, 9],
         'D': [10, 11, 12]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# Concatenation along columns
concatenated_df = pd.concat([df1, df2], axis=1)
print(concatenated_df)
   A  B  C   D
0  1  4  7  10
1  2  5  8  11
2  3  6  9  12

この例では、データフレームが列方向に連結され、より幅広いデータフレームが生成されています。列方向に連結する場合、両方のデータフレームの行数は同じである必要があります。

データフレームの結合

結合は、マージと同様にデータフレームを結合する別の技術です。ただし、結合は、列の値の一致ではなく、インデックス値に基づいてデータフレームを結合することに特化しています。この章では、Pandasで利用可能な異なるタイプの結合と、join()関数を使用してそれらを実行する方法について説明します。

Inner Join

内部結合は、両方のデータフレームでインデックス値が一致した行のみを返します。内部結合を実行するには、join()関数を使用し、howパラメータを'inner'に設定します。

python
import pandas as pd

# Sample DataFrames
data1 = {'A': [1, 2, 3],
         'B': [4, 5, 6]}
data2 = {'C': [7, 8, 9],
         'D': [10, 11, 12]}

df1 = pd.DataFrame(data1, index=['X', 'Y', 'Z'])
df2 = pd.DataFrame(data2, index=['Y', 'Z', 'W'])

# Inner Join
joined_df = df1.join(df2, how='inner')
print(joined_df)
   A  B  C   D
Y  2  5  8  11
Z  3  6  9  12

Outer Join

外部結合は、両方のデータフレームから全ての行を返しますが、インデックス値が片方のデータフレームに存在しない場合はNaN値を使用して欠損値を埋めます。外部結合を実行するには、howパラメータを'outer'に設定します。

python
# Outer Join
joined_df = df1.join(df2, how='outer')
print(joined_df)
     A    B    C     D
W  NaN  NaN  9.0  12.0
X  1.0  4.0  NaN   NaN
Y  2.0  5.0  8.0  11.0
Z  3.0  6.0  9.0  12.0

Left Join

左結合は、左側のデータフレームから全ての行と、右側のデータフレームから一致する行を返します。一致が見つからない場合はNaN値が使用されます。左結合を実行するには、howパラメータを'left'に設定します。

python
# Left Join
joined_df = df1.join(df2, how='left')
print(joined_df)
   A  B    C     D
X  1  4  NaN   NaN
Y  2  5  8.0  11.0
Z  3  6  9.0  12.0

Right Join

右結合は、右側のデータフレームから全ての行と、左側のデータフレームから一致する行を返します。一致が見つからない場合はNaN値が使用されます。右結合を実行するには、howパラメータをright'に設定します。

python
# Right Join
joined_df = df1.join(df2, how='right')
print(joined_df)
     A    B  C   D
Y  2.0  5.0  8  11
Z  3.0  6.0  9  12
W  NaN  NaN  9  12

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!