J'essaie de faire une fusion pandas et j'obtiens l'erreur ci-dessus du titre lorsque j'essaie de l'exécuter. J'utilise 3 colonnes pour correspondre alors que juste avant de faire une fusion similaire sur seulement 2 colonnes et cela fonctionne bien.
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"])
colonnes pour les deux trames de données
df:
Index ([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_principal__principa__inc ', u'school_asst_principal_phone', u'school_ass t_principal_email '], dtype =' object ')
c:
Index ([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's chool_asst_principal_email'], dtype = 'object')
Est-il possible de fusionner sur trois colonnes comme celle-ci? Y a-t-il un problème avec l'appel de fusion ici?
Comme mentionné dans les commentaires, vous avez une colonne dupe:
Cela supprimera les colonnes dupliquées du Dataframe
df = df[list(df.columns[~df.columns.duplicated()])]
Pour résoudre le problème des colonnes dupe, vous pouvez soit supprimer la colonne dupe en utilisant dupliqué avec smth. comme:
c = c[~c.columns.duplicated(keep='first')]
ou en ajoutant un caractère supplémentaire à l'un des DataFrames en utilisant par exemple: c.columns=[c.columns[i]+str(i) for i in range(len(c.columns))]
Gardez à l'esprit que dans ce cas, vous devez ajuster la partie fusionnée