2017-07-04 4 views
2

Ziemlich NewPandas - ODER-Bedingung in Verbindung 2 Datensätze

Ich habe 2 Datensätze, beispielsweise Daten Pandas:

C1 C2 C3 C4 
A ANN BXX 9 
B YYY NNN 10 
C UUU DAF 11 



C7 C8 C9 
N PP C 
B KK 68 
F UUU A 

gewünschte Ausgabe:

A ANN UUU 
B YYY KK 
C UUU PP 

Ich brauche Datensätze mitmachen folgende fasion von sql query:

select C1 , C2,C8 from tab1 A, tab2 B where (A.C1 = B.C7 or A.C1 = B.C9); 

Kurz gesagt, ich muss 2 Datensätze zusammenführen, wenn C1 = C7 oder C1 = C9. Ich verstehe, wie man sich mit einer Bedingung verbindet.

Etwas wie:

OuT = pd.merge(tab1 , tab2 , left_on = 'C1', right_on =['C7' OR 'C9'], how = 'inner') 

Antwort

1

Ich glaube, Sie tab2 von melt umformen müssen und dann merge:

tab2 = tab2.melt('C8', value_name='C1').drop('variable', axis=1) 
#older pandas versions 
#tab2 = pd.melt(tab2, id_vars='C8', value_name='C1').drop('variable', axis=1) 

print (tab2) 
    C8 C1 
0 PP N 
1 KK B 
2 UUU F 
3 PP C 
4 KK 68 
5 UUU A 

#inner join by default, so can omit how='inner' 
OuT = pd.merge(tab1 , tab2 , on = 'C1') 
print (OuT) 
    C1 C2 C3 C4 C8 
0 A ANN BXX 9 UUU 
1 B YYY NNN 10 KK 
2 C UUU DAF 11 PP 

und dann bei Bedarf Filtersäulen:

OuT = pd.merge(tab1 , tab2 , on = 'C1')[['C1','C2','C8']] 
print (OuT) 
    C1 C2 C8 
0 A ANN UUU 
1 B YYY KK 
2 C UUU PP 
+0

Versuch Schmelze zu verstehen , Danke vielmals. Es spart mir die Zeit :) – ANI

+0

Froh kann helfen, viel Glück! – jezrael