2015-01-30 30 views
23

Ich versuche, DataFrame A zu DataFrame B inner zu verbinden und bin in einen Fehler geraten.Python Pandas inner join

Hier ist meine Join-Anweisung:

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

Und hier ist der Fehler:

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

Ich bin nicht sicher, dass die Spalte, um Angelegenheiten (sie sind nicht wirklich „bestellt“ sind sie?) , aber nur für den Fall, werden die Datenrahmen wie folgt organisiert:

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) 

muss ich meine Aussage verbinden korrekt? Oder gibt es einen anderen, besseren Weg, um die Kreuzung (oder innere Verbindung) dieser beiden Datenrahmen zu bekommen?

+0

Nur etwas Registriert darauf hin, technisch alle dfs und Serien und Platten für diese Angelegenheit einen Index haben, kann es nicht Sei einer, den du gesetzt hast, aber es gibt immer einen, wahrscheinlich int64, beginnend mit 0. – EdChum

+0

völlig richtig. Ich war mir nicht sicher, wie ich das kurz und bündig sagen sollte. Standardindex? Standardindex? –

Antwort

27

Verwendung merge, wenn Sie nicht auf dem Index Beitritt sind:

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

Follow-up unten in Frage:

ist hier ein replizierbar Beispiel:

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

Dies führt ist :

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

Was passiert, wenn Sie diesen Code ausführen?

+0

Merge hat sogar ein Argument für den Join-Typ, wie: {'links', 'rechts', 'außen', 'inner'}, Standard 'innen' – flyingmeatball

7

Hier ist eine andere Art der Durchführung join. Im Gegensatz zu der verifizierten Antwort ist dies eine allgemeinere Antwort, die auf alle anderen Verbindungsarten anwendbar ist.

Inner Join

inner join kann auch durch explizit zu erwähnen, ausgeführt werden, wie in how folgt:

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

die gleiche Methodik aplies für die anderen Arten von beitreten:

OuterJoin

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

LEFT JOIN

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

Rechts

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