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
我也尝试删除行和替换,这不起作用,因为索引更改.
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)
一种方法使用broadcasting和masking,基本上都采用的事实,乘以0通过-1将不会改变0,所以我们可以乘以整个行-1有相应的label值0s-
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)