在python中通过30分钟获取最近的合并之前和之后的记录

如何解决在python中通过30分钟获取最近的合并之前和之后的记录

我在csv文件中有两个数据帧。描述交通事故的第一数据(df1)和第二数据具有每15分钟(df2)的交通记录数据。我想根据最近的时间在它们之间合并。我使用了python pandas_merge_asof,并且得到了最接近的匹配项。但我希望从交通记录数据中获得比赛前后30分钟的记录。我想将最接近事件的事件与交通数据时间联系起来。如果事件发生在14:02:00,则该时间将与14:00:00记录的交通日期合并

例如:

1-事件数据

Date                detector_id              Inident_type
09/30/2015 8:00:00      1                      crash
09/30/2015 8:02:00      1                    congestion
04/22/2014 15:30:00     9                    congestion
04/22/2014 15:33:00     9                  Emergency vehicle 

    

2-流量数据

Date              detector_id               traffic_volume
09/30/2015 7:30:00      1                         55
09/30/2015 7:45:00      1                         45
09/30/2015 8:00:00      1                         60
09/30/2015 8:15:00      1                         200
09/30/2015 8:30:00      1                         70
04/22/2014 15:00:00     9                         15
04/22/2014 15:15:00     9                          7
04/22/2014 15:30:00     9                         50
04/22/2014 15:45:00     9                         11
04/22/2014 16:00:00     9                         7

2-所需表格

Date              detector_id               traffic_volume     Incident_type
09/30/2015 7:30:00      1                         55                  NA
09/30/2015 7:45:00      1                         45                  NA
09/30/2015 8:00:00      1                         60                Crash
09/30/2015 8:00:00      1                         60              congestion   
09/30/2015 8:15:00      1                         200                 NA
09/30/2015 8:30:00      1                         70                  NA
04/22/2014 15:00:00     9                         15                  NA
04/22/2014 15:15:00     9                          7                  NA
04/22/2014 15:30:00     9                         50              Congestion
04/22/2014 15:30:00     9                         50        Emergency vehicle   
04/22/2014 15:45:00     9                         11                  NA
04/22/2014 16:00:00     9                         7                   NA

我遵循的代码

Merge = pd.merge_asof(df2,df1,left_index = True,right_index = True,allow_exact_maches = False,on='Date',by='detector_id',direction='nearest')

但是它给了我这张桌子。

Date              detector_id               traffic_volume     Incident_type
09/30/2015 8:00:00      1                         60                Crash
04/22/2014 15:30:00     9                         50              Congestion

我想知道事件发生前后的情况。

有什么想法吗? 谢谢。

*如果我这样问而犯错,请告诉我。

解决方法

对于任何有相同问题并想通过使用pandas.merge_asof进行合并的人,都必须使用Tolerance函数。此功能可帮助您调整两个数据集之间的时间差异。

但是您可能会遇到两个与Timedelta和排序索引有关的问题。因此,Timedelta的解决方案是将时间转换为日期时间,如下所示:

df1.Date = pd.to_datetime(df1.Date)
df2.Date = pd.to_datetime(df2.Date)

以及您需要在主代码中应用排序的排序索引,如下所示:

x = pd.merge_asof(df1.sort_values('Date'),#sort_values fix the error"left Key must be sorted"
                  df2.sort_values('Date'),on = 'Date',by = 'Detector_id',direction = 'backward',tolerance =pd.Timedelta('45 min'))

方向可能最接近,在我的情况下,它将选择45分钟内比赛记录前后的所有记录。

方向可能是向后的,将在完全匹配或最接近匹配之后的45分钟内合并所有记录 and Forward将在完全匹配或最接近匹配的45分钟内选择所有记录。

谢谢,希望这对以后的任何人都有帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?