使用熊猫与最近的分钟合并

时间:2019-02-20 10:08:37

标签: python pandas dataframe

我只是想在±1分钟的间隔内合并两个数据帧。

name_df和示例数据集:

Name    Date
A       2/19/2019 17:16:15
B       2/19/2019 17:19:46
C       2/19/2019 17:23:03

另一个日期框架job_df:

Job         Datestamp
Engineer    2/19/2019  17:15:56 
Dancer      2/19/2019  17:19:27 
Singer      2/19/2019  17:22:44 

这是我尝试实现的方法,但是此方法会错过1分钟另一侧的某些行(例如,<30秒向下四舍五入,> 30向上四舍五入):

name_df['Date&Time'] = name_df['Date&Time'].dt.round('1min')
job_df['Date&Time'] = job_df['Date&Time'].dt.round('1min')

merged_df = pd.merge(name_df, job_df, on='Date&Time')

对此有任何帮助,将不胜感激!

1 个答案:

答案 0 :(得分:0)

这是完成您所描述内容的一种潜在方法:

  1. 创建一个新数据框(例如time_df),其中包含name_df和job_df中的日期和时间戳记
  2. 按升序排列time_df
  3. 在time_df中另外创建一列,以为彼此之间在一分钟之内的每组日期和时间戳记指定唯一的组号
  4. 通过计算第一个日期和时间戳记与之后的时间戳记之间的秒数差来填充此新列,只要它们之间的差值为120秒或更短,就为它们提供相同的唯一组号。
  5. 一旦差异大于120秒,请增加组号,然后对下一个未分组的行重复该过程。
  6. 为所有行分配组号后,将time_df合并回date timestamp列的name_df和job_df中,仅保留分别与每个原始数据帧匹配的数据。
  7. 最后,使用两个数据帧中每一个的组号列执行合并

最终,如果要在+/- 1分钟的间隔内对它们进行分组,则可以根据从开始日期还是结束日期和时间开始进行多种选择。如果您有一系列连续的间隔时间,且间隔时间分别少于120秒,则可以通过多种方式将它们组合到+/- 1分钟的括号中。上面的方法可以使您有系统地执行此操作,以防止您描述的某些问题,但最终可能无法完全避免。

话虽如此,尝试一种不同的舍入方法(例如np.floor或np.ceil或它们的等效方法)可能会更容易。决定何时向上取整或何时向下取整似乎有些武断。最后,一旦确定两个时间戳之间的间隔不超过一分钟,则可能需要确定将两个时间戳关联的时间戳。也许使用平均时间可能是一个很好的解决方案。