2015-10-17 734 views
0

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

我有一个熊猫数据帧,看起来如下:

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我可以在这些假设下重新采样数据。但是,如果有更好的方法来做到这一点,请让我知道。

回答

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] 
+0

谢谢!那工作 –

0

您可以使用pandas.to_datetime()一起简单相加calenderid列转换为datetime,并且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 
+0

谢谢!我一直在努力结合datetime和timedelta值。这清除了一切。 –

+0

很高兴我能帮到你! :-)。此外,如果答案有帮助,我想通过点击答案左侧的勾号来请求您接受任何答案(无论您认为最好还是最有帮助),这对社区有帮助 –

相关问题