我有两个概率表 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
我怎样才能做到正确?
最佳答案
这里的问题是对齐会沿着轴发生,因为它们与您得到的 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: Shape of passed values is (3, 1), indices imply (3, 2)
作为:
In [176]:
print(pB.T.shape)
print(pB.T.squeeze().shape)
(1, 3)
(3,)
所以 squeeze
将二维数组展平为一维数组
关于python - 如何在 'pandas' 中乘以 DataFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30080584/