我有一个数据框(df),其中包含行驶距离,并且我已根据某些条件分配了标签。
distance=[0,0.0001,0.20,1.23,4.0]
df = pd.DataFrame(distance,columns=["distance"])
df['label']=0
for i in range(0, len(df['distance'])):
if (df['distance'].values[i])<=0.10:
df['label'][i]=1
elif (df['distance'].values[i])<=0.50:
df['label'][i]=2
elif (df['distance'].values[i])>0.50:
df['label'][i]=3
这段代码运行良好。然而,我有超过100万条包含距离信息的记录,而这个for循环的执行时间比预期还要长。我们能否优化这段代码以减少执行时间?
elif...
变成else:
,你可以缩短微秒数。 - depperm0.10 < df['distance'].values[i])<=0.50
?我建议为每个条件创建一个新的数据框列,然后合并它们,在切片和广播方面比循环更快。 - Andrewdf['label']
设置为0
,为什么df['label'][i] = 1
不会创建错误?另外,我不知道您是否使用Python2或Python3 - 但是对于Python2,请用xrange
替换range
。 - kratenko