【问题标题】:Pandas: Nearest merging熊猫:最近的合并
【发布时间】:2020-05-08 12:37:34
【问题描述】:

我有两个数据框。我想在最近的时间点将第二个数据帧合并到第一个数据帧。

Example: (df1)

user    t   
Ajay    2020-05-05 18:00:00
Ajay    2020-05-05 20:00:00
Ajay    2020-05-06 17:15:00
Ajay    2020-05-06 20:30:00
Ajay    2020-05-06 21:15:00

Example: (df2)

user    t   flag
Ajay    2020-05-05 18:04:00 10
Ajay    2020-05-05 18:12:00 7
Ajay    2020-05-05 20:02:00 9
Ajay    2020-05-06 17:13:00 2
Ajay    2020-05-06 17:45:00 5
Ajay    2020-05-06 20:30:00 8
Ajay    2020-05-06 21:12:00 9

df2 应该在最近的时间戳上合并到 df1 上。根据我有限的理解,熊猫只在精确值上合并。有可能吗?

预期输出:

user    t    flag
Ajay    2020-05-05 18:00:00   10
Ajay    2020-05-05 20:00:00   9
Ajay    2020-05-06 17:15:00   2
Ajay    2020-05-06 20:30:00   8  
Ajay    2020-05-06 21:15:00   9

【问题讨论】:

    标签: pandas


    【解决方案1】:

    使用merge_asofdirection='nearest' 参数:

    df1['t'] = pd.to_datetime(df1['t'])
    df2['t'] = pd.to_datetime(df2['t'])
    
    df = pd.merge_asof(df1, df2, on='t', direction='nearest')
    print (df)
      user_x                   t user_y  flag
    0   Ajay 2020-05-05 18:00:00   Ajay    10
    1   Ajay 2020-05-05 20:00:00   Ajay     9
    2   Ajay 2020-05-06 17:15:00   Ajay     2
    3   Ajay 2020-05-06 20:30:00   Ajay     8
    4   Ajay 2020-05-06 21:15:00   Ajay     9
    

    如果需要也可以通过User合并参数by:

    df1['t'] = pd.to_datetime(df1['t'])
    df2['t'] = pd.to_datetime(df2['t'])
    
    df = pd.merge_asof(df1, df2, on='t', by='user', direction='nearest')
    print (df)
       user                   t  flag
    0  Ajay 2020-05-05 18:00:00    10
    1  Ajay 2020-05-05 20:00:00     9
    2  Ajay 2020-05-06 17:15:00     2
    3  Ajay 2020-05-06 20:30:00     8
    4  Ajay 2020-05-06 21:15:00     9
    

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 2017-07-06
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多