python - 如何在 'pandas' 中乘以 DataFrame?

标签 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

我怎样才能做到正确?

最佳答案

这里的问题是对齐会沿着轴发生,因为它们与您得到的 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/

相关文章:

python - 我需要创建一个列表,其中包含一次取三个列表的所有总和,即添加前 3 个元素,然后添加下 3 个

python - 虚拟环境安装django后,仍然无法导入模块

python - 有没有办法找到矩阵中不同值的概率

python-3.x - 在三列 Pandas 上应用 RMS 公式

python - 将(来回)UNIX 时间戳转换为 pandas.tslib.Timestamp 和系列的日期时间

python - 我如何一次获得许多帧?

python - 包含 SQLite 的第一个 Python 版本是什么?

python - 如何获取 python 中具有最大值的列的列?

python - 在预测决策树中的值后如何创建索引数据框

python - 将列表列转换为字典列