Python日期时间介于日期时间范围之间

时间:2018-03-14 16:38:29

标签: python pandas python-datetime

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

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

enter image description here

enforced_area_df

enter image description here

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

1 个答案:

答案 0 :(得分: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')

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

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有很多重要的功能。

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