将数学运算应用于Pandas中的整个数据帧

时间:2018-06-18 18:46:03

标签: python pandas dataframe

我的数据框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')

1 个答案:

答案 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