将Pandas Dataframe行中的所有值相乘

AMC*_*AMC 3 python numpy dataframe pandas

这基本上是数据帧:

      col1    col2    col3    label
row1   1       0       1        1
row2   0       0       0        1
row3   1       1       1        0
row4   1       2       1        0
Run Code Online (Sandbox Code Playgroud)

我基本上需要它遍历每一行,如果label = 0,则将行中的所有值乘以-1.

我尝试了很多不同的方法,包括:

df.ix[3] = df.ix[3].multiply(-1)
Run Code Online (Sandbox Code Playgroud)

哪个回报:

SettingWithCopyWarning:尝试在DataFrame的切片副本上设置值.尝试使用.loc [row_indexer,col_indexer] = value

我也尝试删除行和替换,这不起作用,因为索引更改.

Max*_*axU 5

In [156]: df.loc[df.label==0, df.columns.drop('label')] = \
              df.loc[df.label==0, df.columns.drop('label')].mul(-1)

In [157]: df
Out[157]:
      col1  col2  col3  label
row1     1     0     1      1
row2     0     0     0      1
row3    -1    -1    -1      0
row4    -1    -2    -1      0
Run Code Online (Sandbox Code Playgroud)

或者更短的版本:

In [160]: df.loc[df.label==0, df.columns.drop('label')] *= -1

In [161]: df
Out[161]:
      col1  col2  col3  label
row1     1     0     1      1
row2     0     0     0      1
row3    -1    -1    -1      0
row4    -1    -2    -1      0
Run Code Online (Sandbox Code Playgroud)


Div*_*kar 5

一种方法使用broadcastingmasking,基本上都采用的事实,乘以0通过-1将不会改变0,所以我们可以乘以整个行-1有相应的label0s-

df[(df.label==0)] *= -1
Run Code Online (Sandbox Code Playgroud)

样品运行 -

In [70]: df
Out[70]: 
      col1  col2  col3  col4  label
row1     1     0     1     3      1
row2     0     0     0     2      1
row3     1     1     1     5      0
row4     1     2     1     7      0

In [71]: df[(df.label==0)] *= -1

In [72]: df
Out[72]: 
      col1  col2  col3  col4  label
row1     1     0     1     3      1
row2     0     0     0     2      1
row3    -1    -1    -1    -5      0
row4    -1    -2    -1    -7      0
Run Code Online (Sandbox Code Playgroud)