2014-10-11 153 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]])