如何有条件地替换pandas数据框

时间:2017-08-13 12:20:29

标签: pandas replace

假设我有一个如下数据框,如何将值(大于0.6)替换为1,并替换值,小于0.3,使用0,并将所有其他值替换为-1

        aaa       bbb       ccc
0  0.953893  0.977473  0.034157
1  0.693851  0.587930  0.584268
2  0.357185  0.429399  0.937016
3  0.384505  0.670054  0.657566
4  0.782799  0.479501  0.196721
5  0.548724  0.487478  0.277674
6  0.019224  0.426555  0.047267
7  0.746972  0.569147  0.973555
8  0.755425  0.885270  0.825515
9  0.427994  0.013501  0.982629

1 个答案:

答案 0 :(得分:5)

我认为您可以将numpy.selectDataFrame构造函数一起使用:

m1 = df.values > .6
m2 = df.values < .3
df = pd.DataFrame(np.select([m1,m2], [1,0], default=-1), index=df.index, columns=df.columns)
print (df)
   aaa  bbb  ccc
0    1    1    0
1    1   -1   -1
2   -1   -1    1
3   -1    1    1
4    1   -1    0
5   -1   -1    0
6    0   -1    0
7    1   -1    1
8    1    1    1
9   -1    0    1

另一个双numpy.where的解决方案:

df = pd.DataFrame(np.where(m1, 1, np.where(m2, 0, -1)), index=df.index, columns=df.columns)
print (df)
   aaa  bbb  ccc
0    1    1    0
1    1   -1   -1
2   -1   -1    1
3   -1    1    1
4    1   -1    0
5   -1   -1    0
6    0   -1    0
7    1   -1    1
8    1    1    1
9   -1    0    1