我在编写有效的代码(没有很多循环)时遇到麻烦,该代码将值每分钟左右更新一次的pandas数据框中的单元(实时流)。在训练集中,我用一个热编码的时间戳变量训练了我的模型,它比连续变量做得更好,所以这就是我要用于生产的东西。数据框如下所示:
datetime DOW_1 DOW_2 ... DOW_7 Month1 Month2 Month3
`2018-07-01 09:30:00` 0 1 0 0 0 1
如您所见,这些列用0和1编码,以表示星期几,星期几(并且我还有更多的年份,is_holiday等列)。在培训,验证时,我很容易做到这一点,并使用pd.get_dummies测试数据,但是现在已经有了实时数据流,我找不到基于df.index.month
我尝试按照这种循环的方式做一些事情,但这非常乏味且缓慢。
i=0
while i < len(df):
for m in range(1,13):
if df.index.iloc[i].month == m:
df['Month'+str(m)][i] = 1
i+=1
else:
i+=1
还有更好的建议吗?
答案 0 :(得分:1)
我仍在考虑一种解决方案,甚至可以删除for,但是您至少可以使用.loc来避免len(df)
时出现外部问题:
for m in range(1, 13):
df.loc[df.index.month == m, 'Month'+str(m)] = 1