首页 > 解决方案 > 您如何隔离白天之间的夜间时段,因为您想要的时段并不都在同一天?

问题描述

我想选择一夜之间的时期。因此,例如,4 月 27 日晚上将从(假设)2017-04-27 18:00 到 2017-04-28 06:30。

我目前正在运行一个 for 循环,该循环从名为 data_input 的 Dataframe 中取出日期

for dates in data_input.index:

我想我想创建一个可以使用以下术语做某事的面具,但我不确定如何将它们结合起来;

data_input.index.date == dates 
data_input.index.hour >18

&

data_input.index.date == dates+timedelta(days=1)
data_input.index.hour <6

所以我想我的问题是如何以正确的方式组合这些。

为了 MVE,这里是 data_input 的前 40 行

data_input.head(40)= 
2017-04-27 00:30:00    13.94
2017-04-27 01:30:00    14.88
2017-04-27 02:30:00    15.24
2017-04-27 03:30:00    15.94
2017-04-27 04:30:00    16.42
2017-04-27 05:30:00    16.12
2017-04-27 06:30:00    15.61
2017-04-27 07:30:00    14.96
2017-04-27 08:30:00    14.56
2017-04-27 09:30:00    13.86
2017-04-27 10:30:00    13.24
2017-04-27 11:30:00    13.43
2017-04-27 12:30:00    13.43
2017-04-27 13:30:00    13.12
2017-04-27 14:30:00    13.06
2017-04-27 15:30:00    12.99
2017-04-27 16:30:00    12.92
2017-04-27 17:30:00    12.88
2017-04-27 18:30:00    12.74
2017-04-27 19:30:00    12.72
2017-04-27 20:30:00    12.96
2017-04-27 21:30:00    13.18
2017-04-27 22:30:00    13.55
2017-04-27 23:30:00    14.31
2017-04-28 00:30:00    15.14
2017-04-28 01:30:00    15.77
2017-04-28 02:30:00    15.88
2017-04-28 03:30:00    15.92
2017-04-28 04:30:00    16.51
2017-04-28 05:30:00    17.06
2017-04-28 06:30:00    16.99
2017-04-28 07:30:00    16.42
2017-04-28 08:30:00    15.88
2017-04-28 09:30:00    15.34
2017-04-28 10:30:00    14.92
2017-04-28 11:30:00    14.81
2017-04-28 12:30:00    14.60
2017-04-28 13:30:00    14.29
2017-04-28 14:30:00    14.06
Name: Temperature (°C), dtype: float64

标签: pythonpandasdatetime

解决方案


您可以使用:

for dates in data_input.index:
    #remove times (set to 00:00:00)
    d = dates.floor('d')
    #add timedeltas
    today = d + pd.Timedelta(18, unit='h')
    tomorrow = d + pd.Timedelta(1, unit='d') + pd.Timedelta(6, unit='h')
    #filtering 
    night_data = data_input.loc[today : tomorrow]
    print (night_data)

推荐阅读