2017-02-07 5 views
1

Ich möchte einige Daten (event_date) von Tabelle B zu Tabelle A hinzufügen, wie unten beschrieben. Es sieht wie ein Join auf event_id aus, diese Spalte enthält jedoch doppelte Werte in beiden Tabellen. Es gibt mehr Spalten in beiden Tabellen, aber ich lasse sie aus Gründen der Übersichtlichkeit weg.Pandas/SQL Join

Wie erreichen Sie den gewünschten Effekt in Pandas und in SQL auf die direkteste Weise?

Tabelle A:

id,event_id 
1,123 
2,123 
3,456 
4,456 
5,456 

Tabelle B:

id,event_id,event_date 
11,123,2017-02-06 
12,456,2017-02-07 
13,123,2017-02-06 
14,456,2017-02-07 
15,123,2017-02-06 
16,123,2017-02-06 

Gewünschtes Ergebnis (Tabelle A + event_date):

id,event_id,event_date 
1,123,2017-02-06 
2,123,2017-02-06 
3,456,2017-02-07 
4,456,2017-02-07 
5,456,2017-02-07 

Antwort

2

merge Verwendung, erste Tropfen Duplikate von B

In [662]: A.merge(B[['event_id', 'event_date']].drop_duplicates()) 
Out[662]: 
    id event_id event_date 
0 1  123 2017-02-06 
1 2  123 2017-02-06 
2 3  456 2017-02-07 
3 4  456 2017-02-07 
4 5  456 2017-02-07 
+0

Das sieht gut aus. SQL, irgendjemand? – Nucular

0

können Sie Pandas Merge verwenden Sie das gewünschte Ergebnis zu erhalten. Schließlich bekommen nur die Spalten, die Sie interessiert sind, von Datenrahmen

df_Final = pd.merge(df1,df2,on='event_id',how='left') 
print df_Final[['id_y','event_id','event_date']] 

Ausgang

id_y event_id event_date 
0  1  123 2017-02-06 
1  2  123 2017-02-06 
2  3  456 2017-02-07 
3  4  456 2017-02-07 
4  5  456 2017-02-07 
5  1  123 2017-02-06 
6  2  123 2017-02-06 
7  3  456 2017-02-07 
8  4  456 2017-02-07 
9  5  456 2017-02-07 
10  1  123 2017-02-06 
11  2  123 2017-02-06 
12  1  123 2017-02-06 
13  2  123 2017-02-06 
1

SQL Teil:

select distinct a.*, b.event_date 
from table_a a 
join table_b b 
    on a.event_id = b.event_id;