获取两个日期时间变量之间的小时列表 [重复]

Posted

技术标签:

【中文标题】获取两个日期时间变量之间的小时列表 [重复]【英文标题】:Get list of of Hours Between Two Datetime Variables [duplicate] 【发布时间】:2020-07-24 06:26:48 【问题描述】:

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

Date               Name  Provider     Task      StartDateTime       LastDateTime
2020-01-01 00:00:00 Bob     PEM   ED A 7a-4p    2020-01-01 07:00:00 2020-01-01 16:00:00
2020-01-02 00:00:00 Tom     PEM   ED C 10p-2a   2020-01-02 22:00:00 2020-01-03 02:00:00

我想列出每个人的StartDateTimeLastDateTime(datetime64[ns]) 之间的小时数,然后创建一个更新的数据框以反映所述列表。例如,更新后的数据框如下所示:

Name    Date         Hour
Bob     2020-01-01    7
Bob     2020-01-01    8
Bob     2020-01-01    9
...
Tom     2020-01-02    22
Tom     2020-01-02    23
Tom     2020-01-03    0
Tom     2020-01-03    1
...

老实说,我不知道从哪里开始,我找到了一些可能提供基础的文章,但我不确定如何使我的查询适应下面的代码,因为我想要基于行的计数和小时值。

def daterange(date1, date2):
    for n in range(int ((date2 - date1).days)+1):
        yield date1 + timedelta(n)

start_dt = date(2015, 12, 20)
end_dt = date(2016, 1, 11)
for dt in daterange(start_dt, end_dt):
    print(dt.strftime("%Y-%m-%d"))

https://www.w3resource.com/python-exercises/date-time-exercise/python-date-time-exercise-50.php

【问题讨论】:

这能回答你的问题吗? Calculate Pandas DataFrame Time Difference Between Two Columns in Hours and Minutes 【参考方案1】:

然后让我们创建日期时间的范围,使用explode

df['Date']=[pd.date_range(x,y , freq='H') for x , y in zip(df.StartDateTime,df.LastDateTime)]
s=df[['Date','Name']].explode('Date').reset_index(drop=True)
s['Hour']=s.Date.dt.hour
s['Date']=s.Date.dt.date
s.head()
         Date Name  Hour
0  2020-01-01  Bob     7
1  2020-01-01  Bob     8
2  2020-01-01  Bob     9
3  2020-01-01  Bob    10
4  2020-01-01  Bob    11

【讨论】:

这看起来很棒的两件事 1) 收到错误 'AttributeError: 'DataFrame' object has no attribute 'explode' 和 2) 我是 Python 新手,请您注释代码。在此处阅读有关爆炸的内容w3resource.com/pandas/series/series-explode.php @Raven explode 是 pandas 0.25.0 之后的新版本,如果您使用旧版本,请更新 @Raven 也用于爆炸 ***.com/questions/53218931/… @Raven 关于 zip ***.com/questions/49783594/for-loop-and-zip-in-python

以上是关于获取两个日期时间变量之间的小时列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

以小时为单位获取两个日期之间的长度

创建两个日期之间所有日期的数组或列表[重复]

两个日期时间之间的 Spark/Hive 小时数

获取 date-fns 中两个日期之间的持续时间,以天:小时:分钟:秒格式

使用函数获取两个日期之间的日期列表

两个日期之间的持续时间Java [重复]