2016-10-12 5 views
2

Ich habe 2 Pandas Datenrahmen wie folgt.vlookup zwischen 2 Pandas Datenrahmen

DF1:

Security  ISIN 
ABC   I1 
DEF   I2 
JHK   I3 
LMN   I4 
OPQ   I5 

und DF2:

ISIN  Value 
I2  100 
I3  200 
I5  300 

Ich möchte mit einem dritten Datenrahmen wie folgt aussehen, um am Ende:

DF3:

Security Value 
DEF  100 
JHK  200 
OPQ  300 

Antwort

3

Sie könnenverwenden, ist standardmäßig innere join, so how=inner ist wegzulassen, und wenn es nur eine gemeinsame Spalte in beiden Dataframes ist, können Sie auch Parameter on='ISIN' weglassen:

df3 = pd.merge(df1, df2) 
#remove column ISIN 
df3.drop('ISIN', axis=1, inplace=True) 
print (df3) 
    Security Value 
0  DEF 100 
1  JHK 200 
2  OPQ 300 

Oder map Spalte ISIN von Series von df1:

print (df1.set_index('ISIN')['Security']) 
ISIN 
I1 ABC 
I2 DEF 
I3 JHK 
I4 LMN 
I5 OPQ 
Name: Security, dtype: object 

#create new df by copy of df2 
df3 = df2.copy() 
df3['Security'] = df3.ISIN.map(df1.set_index('ISIN')['Security']) 
#remove column ISIN 
df3.drop('ISIN', axis=1, inplace=True) 
#change order of columns 
df3 = df3[['Security','Value']] 
print (df3) 
    Security Value 
0  DEF 100 
1  JHK 200 
2  OPQ 300 
+0

Dank wieder Jazrael. Das war sehr hilfreich. Jetzt, wenn ich nicht zu cheecky bin, hat mein resultierendes DF Baumspalten und die letzten 2 haben nur Werte wie folgt: –

+0

Ihr Kommentar ist gebrochen, etwas falsch? – jezrael

2

Sie können pd.merge verwenden, um automatisch eine innere Verbindung unter ISIN durchzuführen. Die folgende Codezeile sollte erhalten Sie gehen:

df3 = pd.merge(df1, df2)[['Security', 'Value']] 

die in df3 Ergebnisse:

Security Value 
0  DEF 100 
1  JHK 200 
2  OPQ 300 

Das vollständig reproduzierbar Codebeispiel wie folgt aussieht:

import pandas as pd 

df1 = pd.DataFrame({ 
     'Security': ['ABC', 'DEF', 'JHK', 'LMN', 'OPQ'], 
     'ISIN' : ['I1', 'I2', 'I3', 'I4', 'I5'] 
    }) 
df2 = pd.DataFrame({ 
     'Value': [100, 200, 300], 
     'ISIN' : ['I2', 'I3', 'I5'] 
    }) 

df3 = pd.merge(df1, df2)[['Security', 'Value']] 
print(df3) 
Verwandte Themen