我有一个pandas数据框,其时间列从00:00:00
到23:00:00
,类型为timedelta64[ns]
。我想根据时间范围创建一个包含df['m_hours']
和1
的新列0
。例如,当时间范围为01:00:00
到04:00:00
时,它应为1
,其余应为0
。我尝试了以下代码,
df['m_hours'] = np.where(df['hour']>= '01:00:00'& df['hour']<= '04:00:00', '1', '0')
我说错了,
TypeError: cannot compare a dtyped [timedelta64[ns]] array with a scalar of type [bool]
然后我尝试了,
df['m_hours'] = np.where(df[(df['hour']>= '01:00:00')& (df['hour']<= '04:00:00'), '1', '0']
然后我收到了一个错误,
SyntaxError: unexpected EOF while parsing
This帖子看起来很有希望,但对我的情况没有多大帮助。有没有其他方法可以在一定时间内创建假人?我将不胜感激任何帮助。
谢谢!
根据要求,以下编辑是样本df和数据类型
date hour avg_price
2016-05-01 00:00:00 69.5
2016-05-01 01:00:00 67.0
2016-05-01 02:00:00 66.0
2016-05-01 03:00:00 66.0
2016-05-01 04:00:00 65.0
2016-05-01 05:00:00 65.0
2016-05-01 06:00:00 65.5
2016-05-01 07:00:00 69.0
2016-05-01 08:00:00 72.0
2016-05-01 09:00:00 77.0
2016-05-01 10:00:00 80.0
2016-05-01 11:00:00 81.0
2016-05-01 12:00:00 82.0
2016-05-01 13:00:00 85.0
2016-05-01 14:00:00 85.0
2016-05-01 15:00:00 85.0
2016-05-01 16:00:00 88.0
2016-05-01 17:00:00 87.0
2016-05-01 18:00:00 86.0
2016-05-01 19:00:00 81.0
2016-05-01 20:00:00 79.0
2016-05-01 21:00:00 78.0
2016-05-01 22:00:00 76.0
2016-05-01 23:00:00 74.0
2016-05-02 00:00:00 73.0
2016-05-02 01:00:00 68.0
2016-05-02 02:00:00 66.0
2016-05-02 03:00:00 66.0
2016-05-02 04:00:00 64.0
2016-05-02 05:00:00 67.0
,数据类型为:
date datetime64[ns]
hour timedelta64[ns]
avg_price float64
答案 0 :(得分:0)
我想在做了一些研究之后发表我自己的问题的答案,并希望如果有人遇到这个问题,这可能有助于其他人。 我在不改变对象类型的情况下尝试了以下代码,
df['m_hour'] = np.where((df['hour'] >= '01:00:00') & (df['hour'] <= '04:00:00'),'1','0')
我在np.where
子句后缺少一个括号。