Numpy Pandas数据帧与Pandas序列的乘法

Numpy Pandas数据帧与Pandas序列的乘法,numpy,pandas,Numpy,Pandas,我有一个Pandas系列v,带有数字条目v0,v1,…,vn,还有一个Pandas数据框C,带有列C0,C1,…,Cn。我想生成数据帧,其列是n个按比例缩放的列C0*v0,C1*v1*,…,Cn*vn 这种产品的“惯用”表达是什么?这种产品有标准名称吗 最佳解决方案是否需要使用一个或两个基本的numpy.ndarrayv.values和C.values?这是矩阵C乘以带对角线v的矩阵 例如,下面是一个系列v和一个数据帧C: In [65]: v Out[65]: 0 1 1 -2 2

我有一个Pandas
系列
v
,带有数字条目
v0,v1,…,vn
,还有一个Pandas
数据框
C
,带有列
C0,C1,…,Cn
。我想生成数据帧,其列是n个按比例缩放的列
C0*v0,C1*v1*,…,Cn*vn

这种产品的“惯用”表达是什么?这种产品有标准名称吗


最佳解决方案是否需要使用一个或两个基本的
numpy.ndarray
v.values和
C.values

这是矩阵C乘以带对角线v的矩阵

例如,下面是一个系列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
您还可以使用元素乘法和广播来计算。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列的数据帧进行的一些测试表明,使用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]])

这是矩阵C乘以带对角线v的矩阵

例如,下面是一个系列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
您还可以使用元素乘法和广播来计算。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列的数据帧进行的一些测试表明,使用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]])

这是矩阵C乘以带对角线v的矩阵

例如,下面是一个系列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
您还可以使用元素乘法和广播来计算。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列的数据帧进行的一些测试表明,使用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]])

这是矩阵C乘以带对角线v的矩阵

例如,下面是一个系列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
您还可以使用元素乘法和广播来计算。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列的数据帧进行的一些测试表明,使用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]])