熊猫 - 用其他人取代价值

时间:2018-03-08 11:18:12

标签: python pandas replace

我有像这样的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的方式来做到这一点!我正在尝试locmask但暂时没有结果。我还确切地说,行和列的数量和名称可以有所不同,所以我正在研究一种适用于所有情况的代码。有人能给我看一个更好的代码吗?

1 个答案:

答案 0 :(得分:2)

numpy.selectDataFrame 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