假设我有一个如下的数据帧,如何用1代替大于0.6的值,并用0替换值,小于0.3,并用-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
Run Code Online (Sandbox Code Playgroud)
我想你可以使用numpy.select与DataFrame构造函数:
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
Run Code Online (Sandbox Code Playgroud)
另一个双解决方案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
Run Code Online (Sandbox Code Playgroud)