如何有效地操纵数据帧

时间:2017-10-27 18:20:17

标签: python loops dataframe

我的目标:如果值为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上效率很低。反正有加速这种操纵吗?谢谢!

1 个答案:

答案 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'
    })