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

Pandas ошибка слияния "Буфер имеет неправильное количество измерений (ожидается 1, получено 2)"

Я пытаюсь выполнить слияние pandas и получить вышеуказанную ошибку из заголовка, когда я пытаюсь запустить его. Я использую 3 столбца для сопоставления, тогда как перед тем, как я сделаю подобное слияние только на 2 столбцах, он отлично работает.

df = pd.merge(df, c, how="left",
        left_on=["section_term_ps_id", "section_school_id", "state"],
        right_on=["term_ps_id", "term_school_id", "state"])

для двух фреймов данных

ДФ:

Индекс ([u'section_ps_id ', u'section_school_id', u'section_course_number ', u'secti on_term_ps_id ', u'section_staff_ps_id', u'section_number ', u'section_expression', u'section_grade_level ', u'state', u'sections_id ', u'course_ps_id', u'course_sc hool_id ', u'course_number', u'course_schd_dept ', u'courses_id', u'school_ps_id ',  u'course_school_id ', u'school_name', u'school_abbr ', u'school_low_grade', u'sch ool_high_grade ', u'school_alt_school_number', u'school_state ', u'school_phone', u'school_fax ', u'school_principal', u'school_principal_phone ', u'school_principa l_email ', u'school_asst_principal', u'school_asst_principal_phone ', u'school_ass t_principal_email '], dtype =' object ')

с:

Индекс ([u'term_ps_id ', u'term_school_id', u'term_portion ', u'term_start_date ', u' term_end_date ', u'term_abbreviation', u'term_name ', u'state', u'terms_id ', u'sch ool_ps_id', u'term_school_id ', u'school_name', u'school_abbr ', u'school_low_grad e ', u'school_high_grade', u'school_alt_school_number ', u'school_state ', u'school _phone ', u'school_fax', u'school_principal ', u'school_principal_phone', u'school _principal_email ', u'school_asst_principal', u'school_asst_principal_phone ', u chool_asst_principal_email'], DTYPE = 'объект')

Можно ли объединиться на трех столбцах? Что-то не так в вызове слияния здесь?

4b9b3361

Ответ 1

Как уже упоминалось в комментариях, у вас есть столбец об ошибке:

enter image description here

Ответ 2

Это удалит дублированные столбцы из Dataframe

df = df[list(df.columns[~df.columns.duplicated()])]

Ответ 3

Чтобы задать проблему столбцов dupe, вы можете либо сбросить столбец dupe, используя duplicated с помощью smth. как:

c = c[~c.columns.duplicated(keep='first')]

или добавив дополнительный char к одному из DataFrames, используя, например: c.columns=[c.columns[i]+str(i) for i in range(len(c.columns))]

Имейте в виду, что в этом случае вы должны настроить слияющую часть