Pandas/SQL连接

Pandas/SQL连接,sql,pandas,join,Sql,Pandas,Join,我想将表B中的一些数据(event\u date)添加到表A中,如下所述。它看起来像是event\u id上的联接,但是此列在两个表中都包含重复的值。两个表中都有更多的列,但为了清楚起见,我省略了它们 如何以最直接的方式在Pandas和SQL中实现预期效果 表A: id,event_id 1,123 2,123 3,456 4,456 5,456 表B: id,event_id,event_date 11,123,2017-02-06 12,456,2017-02-07 13,123,2017

我想将表B中的一些数据(
event\u date
)添加到表A中,如下所述。它看起来像是
event\u id
上的联接,但是此列在两个表中都包含重复的值。两个表中都有更多的列,但为了清楚起见,我省略了它们

如何以最直接的方式在Pandas和SQL中实现预期效果

表A:

id,event_id
1,123
2,123
3,456
4,456
5,456
表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
预期结果(表A+事件日期):

您可以使用来获得所需的结果。最后,从DataFrame中只获取您感兴趣的列

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

    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

使用
merge
,首先从
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
SQL部分:

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