如何在Python中将日期和已用时间组合到一个日期时间列中

时间:2015-10-17 05:52:10

标签: python datetime pandas timedelta

我正在尝试将日期列和总耗用时间列合并到一个日期时间列中。

我有一个pandas数据框,如下所示:

calendarid       actualdeparturetime   actualtriptime                       
2014-01-01       360.066667            26.716667
2014-01-01       384.050000            19.516667
2014-01-01       406.733333            21.900000
2014-01-01       424.850000            17.550000
2014-01-01       444.666667            23.100000

实际出发时间列是每天经过的总分钟数。 我想将数据帧转换为如下所示:

actualdeparturetime   actualtriptime                       
2014-01-01 06:00:04   26.716667
2014-01-01 06:24:03   19.516667
2014-01-01 06:46:44   21.900000
2014-01-01 07:04:51   17.550000
2014-01-01 07:24:40   23.100000

我已经尝试了几种技术,包括timedelta和使用csv数据解析器,但我仍在学习,似乎无法自己解决这个问题。有人可以帮忙吗?

我的最终目标是将数据汇总为每天30分钟的时间间隔,然后取每个时间间隔内实际旅行时间的平均值。我假设转换为datetimeindex我可以在这些假设下重新采样数据。但是,如果有更好的方法,请告诉我。

2 个答案:

答案 0 :(得分:1)

使用astype("timedelta64[m]")

In [608]: df['calendarid'] + df['actualdeparturetime'].astype("timedelta64[m]")
Out[608]:
0   2014-01-01 06:00:00
1   2014-01-01 06:24:00
2   2014-01-01 06:46:00
3   2014-01-01 07:04:00
4   2014-01-01 07:24:00
dtype: datetime64[ns]

答案 1 :(得分:0)

您可以使用简单添加和pandas.to_datetime()calenderid列转换为日期时间,使用pandas.to_timedelta()actualdeparturetime列转换为timedelta(以及unit='m'把单位作为分钟的论据)。示例 -

df['actualdeparturetime'] = pd.to_datetime(df['calendarid']) + pd.to_timedelta(df['actualdeparturetime'],unit='m')

演示 -

In [37]: df
Out[37]:
   calendarid  actualdeparturetime  actualtriptime
0  2014-01-01           360.066667       26.716667
1  2014-01-01           384.050000       19.516667
2  2014-01-01           406.733333       21.900000
3  2014-01-01           424.850000       17.550000
4  2014-01-01           444.666667       23.100000

In [38]: df['actualdeparturetime'] = pd.to_datetime(df['calendarid']) + pd.to_timedelta(df['actualdeparturetime'],unit='m')

In [39]: df
Out[39]:
   calendarid        actualdeparturetime  actualtriptime
0  2014-01-01 2014-01-01 06:00:04.000020       26.716667
1  2014-01-01 2014-01-01 06:24:03.000000       19.516667
2  2014-01-01 2014-01-01 06:46:43.999980       21.900000
3  2014-01-01 2014-01-01 07:04:51.000000       17.550000
4  2014-01-01 2014-01-01 07:24:40.000020       23.100000