Pandas DataFrame与Pandas系列的乘法

时间:2014-10-11 14:31:22

标签: numpy pandas

我有一个Panda Series v,数字条目v0, v1, ..., vn和Pandas DataFrame C,列C0, C1, ..., Cn。我想生成DataFrame,其列是 n 缩放列C0*v0, C1*v1*, ..., Cn*vn

什么是"惯用"表达这样的产品?这种产品是否有标准名称?

最好的解决方案是否需要使用基础numpy.ndarray v.valuesC.values中的一个或两个?

1 个答案:

答案 0 :(得分:3)

矩阵C乘以矩阵与对角线v

的矩阵乘法

例如,这里是Series v和DataFrame 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

您还可以使用逐元素乘法和广播来计算。 DataFrame 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列的DataFrame进行的一些测试表明,使用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]])