2014-10-11 178 views
0

我有一個熊貓Seriesv,與數字輸入v0, v1, ..., vn,和熊貓DataFrameC,與列C0, C1, ..., Cn。我想要生成DataFrame,其列是n縮放列C0*v0, C1*v1*, ..., Cn*vn乘用熊貓系列

什麼是這種產品的「慣用」表達?這種產品是否有標準名稱?

最好的解決方案是否需要與底層的numpy.ndarrayv.valuesC.values中的一個或兩個一起工作? 。

回答

3

,通過與對角線訴矩陣的矩陣C的矩陣乘法

例如,這裏有一個系列v和數據幀C:

In [65]: v 
Out[65]: 
0 1 
1 -2 
2 5 
dtype: int64 

In [66]: C 
Out[66]: 
    0 1 2 
0 0 1 2 
1 3 4 5 
2 6 7 8 
3 9 10 11 
4 12 13 14 

這裏的產品:

In [67]: C.dot(np.diag(v)) 
Out[67]: 
    0 1 2 
0 0 -2 10 
1 3 -8 25 
2 6 -14 40 
3 9 -20 55 
4 12 -26 70 

你也可以使用元素乘法和廣播來計算。數據幀multiply方法和*操作手柄廣播,所以你可以寫:

In [102]: C * v 
Out[102]: 
    0 1 2 
0 0 -2 10 
1 3 -8 25 
2 6 -14 40 
3 9 -20 55 
4 12 -26 70 

,用50行100列的數據幀的一些測試表明,它是更有效的與numpy的陣列工作,如下:

In [113]: C.values * v.values 
Out[113]: 
array([[ 0, -2, 10], 
     [ 3, -8, 25], 
     [ 6, -14, 40], 
     [ 9, -20, 55], 
     [ 12, -26, 70]])