1. ホーム
  2. python

[解決済み] Pandasの内部結合がValueError: len(left_on) must equal the number of levels in index of "right "を出すのはなぜですか?

2022-02-08 03:33:06

質問内容

データフレームAとデータフレームBを内部結合しようとしているのですが、エラーに陥っています。

以下は、私のjoinステートメントです。

merged = DataFrameA.join(DataFrameB, on=['Code','Date'])

そして、これがエラーです。

ValueError: len(left_on) must equal the number of levels in the index of "right"

カラムの順番が重要かどうかはわかりませんが(本当に"ordered"ではないのですね)、念のため、DataFrameはこのように構成されています。

DataFrameA:  Code, Date, ColA, ColB, ColC, ..., ColG, ColH (shape: 80514, 8 - no index)
DataFrameB:  Date, Code, Col1, Col2, Col3, ..., Col15, Col16 (shape: 859, 16 - no index)

Joinステートメントを修正する必要がありますか? または、これら2つのDataFrameの交差点(または内部結合)を取得する、より良い方法が他にありますか?

どのように解決するのですか?

使用 merge インデックスで結合しない場合。

merged = pd.merge(DataFrameA,DataFrameB, on=['Code','Date'])

以下の質問のフォローアップをお願いします。

再現性の高い例をご紹介します。

import pandas as pd
# create some timestamps for date column
i = pd.to_datetime(pd.date_range('20140601',periods=2))

#create two dataframes to merge
df = pd.DataFrame({'code': ['ABC','EFG'], 'date':i,'col1': [10,100]})
df2 = pd.DataFrame({'code': ['ABC','EFG'], 'date':i,'col2': [10,200]})

#merge on columns (default join is inner)
pd.merge(df, df2, on =['code','date'])

この結果は

    code    col1    date    col2
0   ABC     10      2014-06-01  10
1   EFG     100     2014-06-02  200

このコードを実行するとどうなりますか?