乘用熊猫系列
问题描述:
我有一个熊猫Series
v
,与数字输入v0, v1, ..., vn
,和熊猫DataFrame
C
,与列C0, C1, ..., Cn
。我想要生成DataFrame
,其列是n缩放列C0*v0, C1*v1*, ..., Cn*vn
。乘用熊猫系列
什么是这种产品的“惯用”表达?这种产品是否有标准名称?
最好的解决方案是否需要与底层的numpy.ndarray
的v.values
和C.values
中的一个或两个一起工作? 。
答
,通过与对角线诉矩阵的矩阵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]])