我的数据框df如下所示:
HMM A C D E F G H I K L M
M 1 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 0
N 2 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
K 3 9999 9999 9999 9999 9999 9999 9999 9999 0 9999 9999
K 4 9999 9999 9999 9999 9999 9999 9999 9999 0 9999 9999
S 5 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
我想在数据帧的所有元素上应用函数(2**(-x/1000))
,使9999变为接近零,0变为1。
我试过了:
prob=lambda x:2**(-x/1000)
df.apply(prob)
但是,它会返回错误:
("bad operand type for unary -: 'str'", 'occurred at index A')
答案 0 :(得分:0)
使用set_index
在索引中移动str列,然后使用apply
:
df.set_index('HMM').apply(prob)
输出:
A C D E F G H \
HMM
M 1 0.000977 0.000977 0.000977 0.000977 0.000977 0.000977 0.000977
N 2 0.000977 0.000977 0.000977 0.000977 0.000977 0.000977 0.000977
K 3 0.000977 0.000977 0.000977 0.000977 0.000977 0.000977 0.000977
K 4 0.000977 0.000977 0.000977 0.000977 0.000977 0.000977 0.000977
S 5 0.000977 0.000977 0.000977 0.000977 0.000977 0.000977 0.000977
I K L M
HMM
M 1 0.000977 0.000977 0.000977 1.000000
N 2 0.000977 0.000977 0.000977 0.000977
K 3 0.000977 1.000000 0.000977 0.000977
K 4 0.000977 1.000000 0.000977 0.000977
S 5 0.000977 0.000977 0.000977 0.000977