我有像这样的pandas DataFame:
cols col1 col2 col3 col4
lines
l1 0.004975 0.004975 0.865672 0.99005
l2 0.004975 0.004975 0.865672 0.99005
l3 0.004975 0.004975 0.990050 0.99005
l4 0.004975 0.019900 0.865672 0.99005
l5 0.004975 0.004975 0.990050 0.99005
l6 0.004975 0.004975 0.865672 0.99005
l7 0.004975 0.004975 0.865672 0.99005
l8 0.004975 0.004975 0.865672 0.99005
l9 0.004975 0.019900 0.865672 0.99005
我想用另一个值替换每个值:如果值是< 0.025,那么它应该是1,如果> 0.0975然后它应该是3,而在其他每种情况下都是2。
此代码完成工作:
x = len(list(df.index))
y = len(list(df.columns))
for i in range(x):
l = df.iloc[i]
for j in range(y) :
if l[j] < 0.025:
l[j] = 1
elif l[j] > 0.975:
l[j] = 3
else:
l[j] = 2
但这非常难看,我想有更优雅和pythonic的方式来做到这一点!我正在尝试loc
和mask
但暂时没有结果。我还确切地说,行和列的数量和名称可以有所不同,所以我正在研究一种适用于所有情况的代码。有人能给我看一个更好的代码吗?
答案 0 :(得分:2)
将numpy.select
与DataFrame
contructor:
m1 = df < 0.025
m2 = df > 0.975
df = pd.DataFrame(np.select([m1, m2], [1,3], default=2), index=df.index, columns=df.columns)
print (df)
col1 col2 col3 col4
cols
l1 1 1 2 3
l2 1 1 2 3
l3 1 1 3 3
l4 1 1 2 3
l5 1 1 3 3
l6 1 1 2 3
l7 1 1 2 3
l8 1 1 2 3
l9 1 1 2 3