web-dev-qa-db-fra.com

Pourquoi Pandas une jointure interne donne-t-il à ValueError: len (left_on) doit être égal au nombre de niveaux de l'index de "right"?

J'essaie de joindre en interne DataFrame A à DataFrame B et je rencontre une erreur.

Voici ma déclaration de jointure:

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

Et voici l'erreur:

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

Je ne suis pas sûr que l'ordre des colonnes compte (elles ne sont pas vraiment "ordonnées", n'est-ce pas?), Mais juste au cas où, les DataFrames seraient organisés comme suit:

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)

Dois-je corriger ma déclaration de participation? Ou existe-t-il un meilleur moyen d'obtenir l'intersection (ou la jointure interne) de ces deux cadres de données?

48
Ian Joyce

utilisez merge si vous ne rejoignez pas l'index:

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

suivi de la question ci-dessous:

Voici un exemple reproductible:

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'])

Ce résultat est:

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

Qu'est-ce qui se passe lorsque vous exécutez ce code?

70
JAB

Voici une autre façon d'effectuer join. Contrairement à la réponse vérifiée, il s'agit d'une réponse plus générale applicable à tous les autres types de jointure.

jointure interne

inner join peut également être effectué en le mentionnant explicitement comme suit dans how:

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

La même méthodologie s'applique aux autres types de jointure:

OuterJoin

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

Jointure gauche

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

Rejoindre à droite

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