Python 介于日期时间范围内的日期时间

Python datetime that fall between a datetime range

我试图找出在给定最长时间后,车辆在具有强制时间范围的区域停放了多长时间。 例如:

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

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

最好的做法是将 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')

然后你需要做这样的事情来合并数据帧:

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 中的许多重要功能.

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