【问题标题】:Outer join of two data frames that repeats for all customers (python)对所有客户重复的两个数据框的外连接(python)
【发布时间】:2019-11-01 23:22:32
【问题描述】:

如何为每个客户进行外部联接?

我有一个这样的数据集

 Customer      Timestamp        Other_Col
     A    2017-05-01 00:01:00     Jun
     A    2017-05-01 00:02:00     Sep
     A    2017-05-01 00:03:00     Jun
     B    2017-05-07 23:58:00     Sep
     B    2017-05-07 23:59:00     Sep

还有一个这样的

         Timestamp
     2017-05-01 00:01:00
     2017-05-01 00:02:00
     2017-05-01 00:03:00
     2017-05-07 23:58:00
     2017-05-07 23:59:00

我想在我的数据框中为每个客户获取所有时间戳

 Customer      Timestamp        Other_Col
     A    2017-05-01 00:01:00     Jun
     A    2017-05-01 00:02:00     Sep
     A    2017-05-01 00:03:00     Jun
     A    2017-05-07 23:58:00     NaN
     A    2017-05-07 23:59:00     NaN
     B    2017-05-01 00:01:00     NaN
     B    2017-05-01 00:02:00     NaN
     B    2017-05-01 00:03:00     NaN
     B    2017-05-07 23:58:00     Sep
     B    2017-05-07 23:59:00     Sep

我该怎么做?进行合并(how= 'outer') 并不能解决问题,但我不能让它依赖于客户。

【问题讨论】:

    标签: python join outer-join


    【解决方案1】:

    您应该对“基”表进行左连接以实现此目的:

    import pandas as pd
    df1 = pd.read_csv('df1.txt',sep=';')
    df1
    Customer    Timestamp   Other_Col
    0   A   2017-05-01 00:01:00 Jun
    1   A   2017-05-01 00:02:00 Sep
    2   A   2017-05-01 00:03:00 Jun
    3   B   2017-05-07 23:58:00 Sep
    4   B   2017-05-07 23:59:00 Sep
    
    df2 = pd.read_csv('df2.txt',sep=';')
    df2
    Timestamp
    0   2017-05-01 00:01:00
    1   2017-05-01 00:02:00
    2   2017-05-01 00:03:00
    3   2017-05-07 23:58:00
    4   2017-05-07 23:59:00
    
    
    base = pd.DataFrame()
    base['Customer']  = ['A']*5 + ['B']*5 
    base['Timestamp'] = list(df2['Timestamp'])*2
    
    
    pd.merge(base,df1,how='left',on=['Customer','Timestamp'])
    Customer    Timestamp   Other_Col
    0   A   2017-05-01 00:01:00 Jun
    1   A   2017-05-01 00:02:00 Sep
    2   A   2017-05-01 00:03:00 Jun
    3   A   2017-05-07 23:58:00 NaN
    4   A   2017-05-07 23:59:00 NaN
    5   B   2017-05-01 00:01:00 NaN
    6   B   2017-05-01 00:02:00 NaN
    7   B   2017-05-01 00:03:00 NaN
    8   B   2017-05-07 23:58:00 Sep
    9   B   2017-05-07 23:59:00 Sep
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2021-07-24
      • 2014-02-14
      • 2016-03-13
      • 2019-05-01
      • 2015-07-08
      • 2014-03-23
      相关资源
      最近更新 更多