我的目标:如果值为2,则将此单元格和下一行中的单元格设置为0.如果值为3,则将此单元格设置为1并将下一行中的单元格设置为0。 来自:
1 1 1
0 2 3
1 1 1
为:
1 1 1
0 0 1
1 0 0
for i in range(0,len(dfnew)):
for j in range(0,len(dfnew.columns)):
if dfnew.iloc[i,j] == 2:
dfnew.iloc[i,j] = 0
dfnew.iloc[i+1, j] = 0
if dfnew.iloc[i,j] ==3:
dfnew.iloc[i+1,j] = 0
dfnew.iloc[i,j] = 1
双嵌套' for循环'有效,但在1000 * 2000 Dataframe上效率很低。反正有加速这种操纵吗?谢谢!
答案 0 :(得分:1)
我怀疑使用iloc
获取索引,然后在这些索引上使用iloc
将比循环更快。基于In [30]: df
Out[30]:
0 1 2
0 1 1 1
1 0 2 3
2 1 1 1
In [31]: idx, idy = np.where(df == 2)
In [32]: df.iloc[idx, idy] = 0
In [33]: df.iloc[idx + 1, idy] = 0
In [34]: idx, idy = np.where(df == 3)
In [35]: df.iloc[idx, idy] = 1
In [36]: df.iloc[idx + 1, idy] = 0
In [37]: df
Out[37]:
0 1 2
0 1 1 1
1 0 0 1
2 1 0 0
的设置具有显着的开销,但可以非常快速地设置多个内容,但是,设置单个元素会导致开销许多次。所以试试:
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})