Почему внутреннее соединение 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"
Я не уверен, что порядок столбцов имеет значение (они действительно не "упорядочены", не так ли?), но на всякий случай, фреймы данных организованы следующим образом:
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)
мне нужно исправить мое заявление о присоединении? Или есть другой, лучший способ получить пересечение (или внутреннее соединение) этих два кадра данных?
2 ответов
использовать 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
что происходит, когда вы запустите этот код?
вот еще один способ выполнения join
. В отличие от проверенного ответа, это более общий ответ, применимый к все другие типы join.
Внутреннее Соединение
inner join
также может быть выполнена путем явного упоминания его следующим образом how
:
pd.merge(df1, df2, on='filename', how='inner')
та же методология применяется для других типов соединения:
OuterJoin
pd.merge(df1, df2, on='filename', how='outer')
слева Присоединяйтесь
pd.merge(df1, df2, on='filename', how='left')
Право На Вступление
pd.merge(df1, df2, on='filename', how='right')