¿Por qué la unión interna de Pandas da ValueError: len (left_on) debe ser igual al número de niveles en el índice de “derecho”?

Estoy tratando de unir internamente DataFrame A a DataFrame B y estoy teniendo un error.

Aquí está mi statement de unión:

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

Y aquí está el error:

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

No estoy seguro de que el orden de la columna sea importante (no están realmente “ordenados”, ¿no?), Pero, por si acaso, los DataFrames están organizados de esta forma:

 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) 

¿Necesito corregir mi statement de unión? ¿O hay otra forma mejor de obtener la intersección (o unión interna) de estos dos DataFrames?

    usa merge si no te estás uniendo en el índice:

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

    Seguimiento a la pregunta a continuación:

    Aquí hay un ejemplo reproducible:

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

    Este resultado es:

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

    ¿Qué pasa cuando ejecutas este código?

    Aquí hay otra forma de realizar join . A diferencia de la respuesta verificada, esta es una respuesta más general aplicable a todos los demás tipos de unión .

    Unir internamente

    inner join también se puede realizar mencionándola explícitamente de la siguiente how :

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

    La misma metodología se aplica para los otros tipos de unión:

    OuterJoin

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

    Unirse a la izquierda

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

    Unirse a la derecha

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