首页 > 解决方案 > 从不同时区的两个日期计算持续时间

问题描述

我有一个包含行程数据的 CSV 文件:

Trip ID,Depart Time,Arrive Time,Depart Timezone,Arrive Timezone
1,08/29/21 09:00 PM,08/29/21 09:45 PM,GMT-04:00,GMT-04:00
2,08/29/21 10:00 PM,08/30/21 01:28 AM,GMT-04:00,GMT-04:00
3,08/30/21 01:29 AM,08/30/21 01:30 AM,GMT-04:00,GMT-04:00
4,08/30/21 01:45 AM,08/30/21 03:06 AM,GMT-04:00,GMT-04:00
5,08/30/21 03:08 AM,08/30/21 03:58 AM,GMT-04:00,GMT-04:00
6,08/30/21 03:59 AM,08/30/21 04:15 AM,GMT-04:00,GMT-04:00

我可以将此文件读入数据框:

trips = pd.read_csv("trips.csv", sep=',')

我想要完成的是添加一列“持续时间”,它以分钟为单位提供旅行持续时间。行程持续时间必须计算为行程到达时间和行程出发时间之间的差值。在上表中,“出发时间”是相对于“出发时区”的。同样,“到达时间”相对于“到达时区”。请注意,在上面的示例中,到达和离开日期以及到达和离开时区恰好是相同的,但这通常不适用于我的数据。

标签: python-3.xpandasdataframedatetime

解决方案


您拥有的是 UTC 偏移量(GMT-04:00 比 UTC 晚四个小时);您可以通过 ' ' 加入日期/时间列和相应的偏移量列并解析to_datetime。然后,您可以从生成的 tz 感知日期时间列计算持续时间 (timedelta)。前任:

# make datetime columns:
df['dt_depart'] = pd.to_datetime(df['Depart Time'] + ' ' + df['Depart Timezone'],
                                 utc=True)
df['dt_arrive'] = pd.to_datetime(df['Arrive Time'] + ' ' + df['Arrive Timezone'],
                                 utc=True)

注意:我在UTC=True这里使用以防输入中存在混合的 UTC 偏移量。这给了例如

df['dt_depart']
Out[6]: 
0   2021-08-29 17:00:00+00:00
1   2021-08-29 18:00:00+00:00
2   2021-08-29 21:29:00+00:00
3   2021-08-29 21:45:00+00:00
4   2021-08-29 23:08:00+00:00
5   2021-08-29 23:59:00+00:00
Name: dt_depart, dtype: datetime64[ns, UTC]

然后

# calculate the travel duration (timedelta column):
df['traveltime'] = df['dt_arrive'] - df['dt_depart']

给出例如

df['traveltime']
Out[7]: 
0   0 days 00:45:00
1   0 days 03:28:00
2   0 days 00:01:00
3   0 days 01:21:00
4   0 days 00:50:00
5   0 days 00:16:00
Name: traveltime, dtype: timedelta64[ns]

推荐阅读