【问题标题】:Python datetime that fall between a datetime range介于日期时间范围之间的 Python 日期时间
【发布时间】:2018-03-14 16:38:29
【问题描述】:

我正在尝试找出在给定最大时间后车辆在强制时间范围内停放多长时间。 例如:

area enforced: 2:00 pm to 6:00 pm

max time a vehicle can park: 2 hours

vehicle parked duration: 2880 minutes (2 days)

duration parked after max time: 240 minutes (4 hours)

我有两个用 pandas 读取的 CSV 数据框:

vehicle_df

enforced_area_df

最终我不知道如何检查停放车辆的开始和结束时间何时落在强制区域的强制时间范围内。有没有人有一些有用的图书馆和一些建议。

【问题讨论】:

  • 请记住,您可以轻松地将日期时间实例与数字进行比较。您只需要将 csv 数据输入日期时间对象并进行比较。看看 pandas 将 csv 加载到数据帧中。您还可以使用 timedelta 对象来计算时间间隔...
  • 发布部分数据会很有用。
  • 作为提示,当您读取 csv 文件时,使用属性 parse_dates 像 df = pd.read_csv(filename, parse_dates=['start_park_time','end_park_time']) 将这些列转换为日期时间对象。
  • 感谢您的建议,我会调查的。 @joaoavf 抱歉,请查看我所做的编辑。
  • 我已经更新了代码!

标签: python pandas python-datetime


【解决方案1】:

最好将Parked fromParked to 列为datetime

import pandas as pd
import numpy as np

vehicle_df = pd.read_csv('vehicle.csv', parse_dates=[2,3])

加载中enforced_area_df

enforced_area_df = pd.read_csv('enforced_area.csv')

然后你需要做这样的事情来合并 DataFrame:

df = vehicle_df.merge(enforced_area_df,on='Zone')

您需要从Enforced Time 字段中获取小时数:

df['Start Enforce'] = df['Enforced Time'].str.split().str[0].str.split(':').str[0].astype(int)
df['Finish Enforce'] = df['Enforced Time'].str.split().str[-1].str.split(':').str[0].astype(int)

那么你可能会这样做:

def check_time(df_line):
    dt_range = pd.date_range(start = df_line['Parked from'], end=df_line['Parked to'], freq='1Min')
    return np.sum((dt_range.hour >= df_line['Start Enforce']) & (dt_range.hour < df_line['Finish Enforce']))


df['Minutes While Enforced'] = df.apply(check_time, axis=1)

不确定您要构建的确切内容,但如果您修改此代码,您将能够做很多事情,因为其中使用的 pandas 中有很多重要的功能。

最重要的是,它显示了如何检查停放车辆的开始和结束时间何时在强制时间范围内(以及多长时间)。

【讨论】:

  • 非常感谢,这正是我想要实现的目标,不过我不太确定如何描述这个问题。
猜你喜欢
  • 2017-12-20
  • 2020-02-26
  • 2022-11-02
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 2015-12-19
  • 2021-06-04
相关资源
最近更新 更多