【问题标题】:Pandas- sum-products of Dataframe with another DataframePandas- Dataframe 与另一个 Dataframe 的 sum-products
【发布时间】:2017-07-25 00:39:41
【问题描述】:

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

data = pd.DataFrame(index=[0, 1, 2], columns=['A', 'B', 'C'], data=[[1, 2, 3], [4, 5, 6], [7, 8, 9]])

> data:
>    A  B  C
> 0  1  2  3
> 1  4  5  6
> 2  7  8  9

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

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

对于我的两组不同的权重,我需要计算的是权重*数据的逐行求和积。例如:

> 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

有没有一种方法可以创建上面概述的结果数据框,而不是遍历所有行并连接?还是迭代/串联是最好的方法?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    这是一个经典的矩阵乘法问题。你可以使用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)

    【讨论】:

    • 绝对是。我想我不能只见树木不见森林! :) 谢谢
    • @MarkD 很高兴为您提供帮助。 :) 我不知道 pandas 数据帧有自己的 dot 函数,但我猜他们这样做是为了让你可以自己使用它(它是相同但更紧凑的代码)。
    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-22
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多