如何在 date_range 函数生成的日期时间中应用条件?

how to apply condition in datetime generated from date_range function?

我有一个功能,它以 15 分钟的间隔生成 10 天的时间戳。这些值存储在一个 numpy 数组中。我想对每个应用一个条件,检查时间在早上 6 点到晚上 7 点之间,然后打印 "something",当时间在晚上 7 点以上到第二天早上 6 点打印 "something else"。 我的时间戳代码:

import pandas as pd
import numpy as np
timeStamp = pd.date_range(start='1/1/2020', end='1/10/2020', freq='15min')
chargeTime = datetime.time(6,0,0)
dischargeTime = datetime.time(19,0,0)

我不知道如何从 timeStamp 中获取日期并将其与 chargeTime 和 dischargeTime 进行比较。

我想你想要的是这样的,你将 charge_timedischarge_time 设置为整数并与时间戳的 .hour 属性进行比较:

import pandas as pd
import numpy as np
time_stamps = pd.date_range(start='1/1/2020', end='1/10/2020', freq='15min')

charge_time = 6  # 6am
discharge_time = 19  # 7pm

for t in time_stamps:
    if charge_time <= t.hour < discharge_time:
        print str(t) + " - something"
    else:
        print str(t) + " - something else"

这将打印时间戳,然后显示如下消息:

2020-01-09 18:45:00 - something
2020-01-09 19:00:00 - something else

这应该有效。我正在使用 dt.hour 提取日期时间对象的小时,然后使用 np.where() 检查条件是否在 6 到 19 之间,以及 "something" 否则(在 19 到 6 之间)"something else"。这避免了使用 for 循环并且非常有效:

timeStamp = pd.date_range(start='1/1/2020', end='1/10/2020', freq='15min')
df = timeStamp.to_frame()
df.columns = ['dates']
df['conditions'] = np.where((df['dates'].dt.hour > 6) & (df['dates'].dt.hour < 19),"something","something else")

例如:

print(df.loc['2020-01-01 06:45:00':'2020-01-01 07:30:00'])

输出:

                                  dates      conditions
2020-01-01 06:45:00 2020-01-01 06:45:00  something else
2020-01-01 07:00:00 2020-01-01 07:00:00       something
2020-01-01 07:15:00 2020-01-01 07:15:00       something
2020-01-01 07:30:00 2020-01-01 07:30:00       something

最后,如果您希望为 charge_timedischarge_time 提供不同的值,您可以简单地定义它们并在 np.where().

中使用它们
charge_time = 6
discharge_time = 19
df['conditions'] = np.where((df['dates'].dt.hour > charge_time) & (df['dates'].dt.hour < discharge_time),"something","something else")