In your df
初始化periods
必须是数字而不是字符串。
我想如何处理这个问题的方法将取决于您想要有多少个周期。
至少有以下几种方法:
设置周期:
from datetime import time
morning_start = time(7)
morning_end = time(12)
evening_start = time(18)
evening_end = time(22)
periods = {'morning':[morning_start, morning_end], 'evening':[evening_start, evening_end]}
方法一。
def f(x, periods=periods):
for k, v in periods.items():
if x.hour >= v[0].hour and x.hour < v[1].hour:
return k
return 'unknown_period'
方法2。
for k, v in periods.items():
df['periods'] = np.where(((v[0].hour <= df.t.apply(lambda x: x.hour)) & (df.t.apply(lambda x: x.hour) <= v[1].hour)), k, 'unknown_period')
通过定义的两个周期,第一种方法的工作速度更快:
1000 loops, best of 3: 658 µs per loop
vs. 2nd:
100 loops, best of 3: 3.31 ms per loop
在这两种只有两个句点的情况下,您可以将其设为单行表达式(无需循环遍历periods
):
df['periods'] = np.where((morning_start.hour <= df.t.apply(lambda x: x.hour)) & (df.t.apply(lambda x: x.hour) <= morning_end.hour), 'morning', 'evening')