我有一个Panda Series
v
,数字条目v0, v1, ..., vn
和Pandas DataFrame
C
,列C0, C1, ..., Cn
。我想生成DataFrame
,其列是 n 缩放列C0*v0, C1*v1*, ..., Cn*vn
。
什么是"惯用"表达这样的产品?这种产品是否有标准名称?
最好的解决方案是否需要使用基础numpy.ndarray
v.values
和C.values
中的一个或两个?
答案 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]])