2017-02-11 137 views
3

这可能是一个愚蠢的问题,但我想乘以2个数据框,一个是100x2形状(100行和2列),另一个是2x1形状。所述第一数据帧的(仅打印头,并具有100行和2列,即X0和X1): -乘法使用Python熊猫数据框

X0  X1 
0 1  6.1101 
1 1  5.5277 
2 1  8.5186 
3 1  7.0032 
4 1  5.8598 

其它数据帧是一个参数矢量&我称之为西塔2列0,和1.

Theta=pd.DataFrame(np.zeros((1, 2))) 
print("printing initialized Theta:\n",Theta) 

输出是=

0   1 
0 0.0  0.0 

,你可以看到它是尺寸1×2的。现在,我借此西塔数据帧的转置,并且变得:

theta1=theta.transpose() 
print("printing theta transponse:\n",theta1) 

结果是: -

0 
0 0.0 
1 0.0 

然而,当我使用乘以该第一数据帧X具有Theta1:

predict=X.mul(theta1,axis=1) 

我得到的输出(仅打印头):

X0   X1 0 
0 0.0   0.0 0.0 
1 0.0   0.0 0.0 
2 0.0   0.0 0.0 
3 0.0   0.0 0.0 
4 0.0   0.0 0.0 
(100, 3) 

正如你所看到的,它现在已经变成了一个100x3的数据框,当我预计它是一个100x1。 看起来像数据帧毕竟不能基于矩阵乘法相乘。我该怎么做才对?我应该将其转换为numpy.matrix,然后进行矩阵乘法?

回答

0

两点故障。

  1. 要使用dotmul
  2. Theta的指数不与X对齐。因此,您需要对齐Theta的列名以匹配X的列名。

试试这个

Theta.columns = X.columns 
X.dot(Theta.T) 

    0 
0 0.0 
1 0.0 
2 0.0 
3 0.0 
4 0.0 
+0

.dor对齐ü不需要.values(其实你很少需要它);这不是惯用的 – Jeff

+1

和你的最后一部分是惯用的方式(或更好地构造Theta那样);使用.values根本就不是惯用的,应该几乎不会被使用 – Jeff

+0

@Jeff明白了。我会相应地调整答案。 – piRSquared