Подтвердить что ты не робот

Почему внутреннее соединение Pandas дает значение ValueError: len (left_on) должно равняться количеству уровней в индексе "right"?

Я пытаюсь подключиться к DataFrame A к DataFrame B и нахожусь в ошибке.

Здесь мой оператор соединения:

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

И вот ошибка:

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

Я не уверен, что порядок столбцов имеет значение (они не являются "упорядоченными"?), но на всякий случай DataFrames организованы следующим образом:

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)

Нужно ли исправлять выражение о соединении? Или есть другой, лучший способ получить пересечение (или внутреннее соединение) этих двух DataFrames?

4b9b3361

Ответ 1

используйте 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

Что происходит, когда вы запускаете этот код?

Ответ 2

Вот еще один способ выполнения join. В отличие от проверенного ответа, это более общий ответ, применимый ко всем другим типам объединения.

Внутреннее соединение

inner join также может быть выполнена путем явного упоминания о нем следующим образом в how, how:

pd.merge(df1, df2, on='filename', how='inner')

Та же методика применяется для других типов соединения:

внешнее соединение

pd.merge(df1, df2, on='filename', how='outer')

Оставить Присоединиться

pd.merge(df1, df2, on='filename', how='left')

Право Присоединиться

pd.merge(df1, df2, on='filename', how='right')