1. ホーム
  2. python

[解決済み】Pandasの結合問題:列が重なっているがサフィックスが指定されていない

2022-01-28 16:25:43

質問

次のようなデータフレームがあります。

print(df_a)
     mukey  DI  PI
0   100000  35  14
1  1000005  44  14
2  1000006  44  14
3  1000007  43  13
4  1000008  43  13

print(df_b)
    mukey  niccdcd
0  190236        4
1  190237        6
2  190238        7
3  190239        4
4  190240        7

これらのデータフレームを結合しようとすると

join_df = df_a.join(df_b, on='mukey', how='left')

エラーが出ます。

*** ValueError: columns overlap but no suffix specified: Index([u'mukey'], dtype='object')

なぜそうなのでしょうか。データフレームには共通の 'mukey' の値です。

解決方法は?

投稿されたデータのスニペットに関するエラーは少し不可解です。共通の値がないため、値が重ならず結合操作に失敗し、左手と右手にサフィックスを指定する必要があります。

In [173]:

df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')
Out[173]:
       mukey_left  DI  PI  mukey_right  niccdcd
index                                          
0          100000  35  14          NaN      NaN
1         1000005  44  14          NaN      NaN
2         1000006  44  14          NaN      NaN
3         1000007  43  13          NaN      NaN
4         1000008  43  13          NaN      NaN

merge はこの制約がないため動作します。

In [176]:

df_a.merge(df_b, on='mukey', how='left')
Out[176]:
     mukey  DI  PI  niccdcd
0   100000  35  14      NaN
1  1000005  44  14      NaN
2  1000006  44  14      NaN
3  1000007  43  13      NaN
4  1000008  43  13      NaN