Numpy Pandas数据帧与Pandas序列的乘法
我有一个PandasNumpy 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
系列
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
您还可以使用元素乘法和广播来计算。DataFramemultiply
方法和*
操作员处理广播,因此您可以编写:
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
您还可以使用元素乘法和广播来计算。DataFramemultiply
方法和*
操作员处理广播,因此您可以编写:
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
您还可以使用元素乘法和广播来计算。DataFramemultiply
方法和*
操作员处理广播,因此您可以编写:
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
您还可以使用元素乘法和广播来计算。DataFramemultiply
方法和*
操作员处理广播,因此您可以编写:
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]])