如何将'pandas'中的DataFrame相乘?

时间:2015-05-06 15:04:15

标签: python pandas

我有两个概率表p(B)和p(A | B):

pB_array=np.array([[0.97],[0.01],[0.02]])
pB = pd.DataFrame(pB_array,index=['B=n','B=m','B=s'])
pA_B_array=np.array([[0.9,0.8,0.3],[0.1,0.2,0.7]])
pA_B=pd.DataFrame(pA_B_array,index=['A=F','A=T'],columns=['B=n','B=m','B=s'])

我想将它们乘以列:

fAB=pA_B.multiply(pB.T,axis='columns')

获得一些结果:

     B=n  B=m  B=s
A=F  0.1  0.2  0.3
A=T  0.5  0.4  0.1

但我只能得到这个:

     B=n  B=m  B=s
0    NaN  NaN  NaN
A=F  NaN  NaN  NaN
A=T  NaN  NaN  NaN

我怎么能做对吗?

1 个答案:

答案 0 :(得分:3)

这里的问题是沿着轴会发生对齐,因为这些不匹配你获得NaN值。

In [173]:

fAB=pA_B.multiply(pB.T.squeeze().values,axis='columns')
fAB
Out[173]:
       B=n    B=m    B=s
A=F  0.873  0.008  0.006
A=T  0.097  0.002  0.014

我们需要在这里调用squeeze,因为如果没有这样做,形状是错误的,我们也可以通过调用.values来返回一个np数组来匿名化数据,这样对齐就不会成为一个问题。

fAB=pA_B.multiply(pB.T.values,axis='columns')

结果:

  

ValueError:传递值的形状为(3,1),index表示暗示(3,2)

如:

In [176]:

print(pB.T.shape)
print(pB.T.squeeze().shape)
(1, 3)
(3,)

所以squeeze将2-d数组展平为1-d数组