Python Pandas-数据帧与另一个数据帧的乘积之和

Python Pandas-数据帧与另一个数据帧的乘积之和,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个pandas数据框架,其中包含在不同时间(索引)在特定位置(列)测量的值。例如(如果我将时间索引设置为整数): 我还想对数据应用多组权重: weights = pd.DataFrame(index=['I', 'II'], columns=['A', 'B', 'C'], data=[[0.5, 0.5, 0.0], [0.5, 0.0, 0.5]]) > weights: > A B C > I 0.5 0.5 0.0 > II

我有一个pandas数据框架,其中包含在不同时间(索引)在特定位置(列)测量的值。例如(如果我将时间索引设置为整数):

我还想对数据应用多组权重:

weights = pd.DataFrame(index=['I', 'II'], columns=['A', 'B', 'C'], data=[[0.5, 0.5, 0.0], [0.5, 0.0, 0.5]])

> weights:
>       A    B    C
> I   0.5  0.5  0.0
> II  0.5  0.0  0.5
我需要计算的是两组不同权重的权重*数据的逐行和积。e、 g:

> result:
>      I    II
> 1  1.5   2.0
> 2  4.5   5.0
> 3  7.5   8.0
我知道如何计算单个列,例如:

result_I = data.mul(weights[:].ix['I'], axis=1).sum(axis=1)

result_I:
> 0    1.5
> 1    4.5
> 2    7.5

除了在所有行上迭代和连接之外,是否有一种方法可以创建上面概述的结果数据帧?或者迭代/串联是最好的方法吗?

这是一个经典的矩阵乘法问题。您可以使用
np.dot

In [190]: result = pd.DataFrame(np.dot(data, weights.T), columns=weights.index); result
Out[190]: 
     I   II
0  1.5  2.0
1  4.5  5.0
2  7.5  8.0


正如John Gait指出的,一个较短的版本是
result=data.dot(weights.T)

这是一个经典的矩阵乘法问题。您可以使用
np.dot

In [190]: result = pd.DataFrame(np.dot(data, weights.T), columns=weights.index); result
Out[190]: 
     I   II
0  1.5  2.0
1  4.5  5.0
2  7.5  8.0


正如John Gait指出的,一个较短的版本是
result=data.dot(weights.T)
pd.DataFrame
有一个
.dot
方法

In [806]: data.dot(weights.T)
Out[806]:
     I   II
0  1.5  2.0
1  4.5  5.0
2  7.5  8.0

pd.DataFrame
有一个
.dot
方法

In [806]: data.dot(weights.T)
Out[806]:
     I   II
0  1.5  2.0
1  4.5  5.0
2  7.5  8.0

绝对是。我想我看不见森林了Thanks@MarkD很乐意帮忙。:)我不知道熊猫数据帧有自己的点函数,但我想它们有点函数,你可以使用它本身(这是相同的,但更紧凑的代码)。它绝对是。我想我看不见森林了Thanks@MarkD很乐意帮忙。:)我不知道熊猫数据帧有自己的点函数,但我想它们有点函数,你可以使用它本身(这是相同的,但更紧凑的代码)。