2017-02-11 181 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