错误在一段时间内创建假人时,熊猫

时间:2017-07-05 18:15:31

标签: python-3.x pandas time-series

我有一个pandas数据框,其时间列从00:00:0023:00:00,类型为timedelta64[ns]。我想根据时间范围创建一个包含df['m_hours']1的新列0。例如,当时间范围为01:00:0004: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

1 个答案:

答案 0 :(得分:0)

我想在做了一些研究之后发表我自己的问题的答案,并希望如果有人遇到这个问题,这可能有助于其他人。 我在不改变对象类型的情况下尝试了以下代码,

df['m_hour'] = np.where((df['hour'] >= '01:00:00') & (df['hour'] <= '04:00:00'),'1','0')

我在np.where子句后缺少一个括号。