【问题标题】:Pandas/SQL join熊猫/SQL 连接
【发布时间】:2017-02-07 19:12:55
【问题描述】:

我想将表 B 中的一些数据 (event_date) 添加到表 A,如下所述。它看起来像 event_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 + 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

【问题讨论】:

    标签: sql pandas join


    【解决方案1】:

    使用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
    

    【讨论】:

      【解决方案2】:

      SQL 部分:

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

      【讨论】:

        【解决方案3】:

        您可以使用Pandas Merge 来获得所需的结果。最后只从 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
        

        【讨论】:

          猜你喜欢
          • 2016-05-10
          • 2017-08-26
          • 2018-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-02
          • 2021-09-28
          相关资源
          最近更新 更多