首页 > 解决方案 > 熊猫中的矢量化点积?

问题描述

我有两个数据框,df1 按日期索引,并包含产品/条目 A、B、...的一些数值 val1、val2:

Date       entry  val1  val2
2017-04-12    A     1     10
2017-04-12    B     2     10
2017-04-12    C     3     10
2017-04-13    A     1     20
2017-04-13    B     2     20
2017-04-13    D     3     20

df2 具有每个日期的每个值的系数:

     2017-04-12  2017-04-13
val1     4           6
val2     5           7

是否有一种很好的矢量化方法来获取 df1 中的值与 df2 中的系数的点积?输出如下所示:

Date       entry  result
2017-04-12    A     54
2017-04-12    B     58
2017-04-12    C     62
2017-04-13    A     146
2017-04-13    B     152
2017-04-13    D     158

我知道循环日期是有效的。

标签: pythonpandasdataframematrix-multiplication

解决方案


DataFrame.mulMultiIndex in df1transpose一起使用df2,然后sum按行使用并转换MultiIndex Series为:Series.reset_indexDataFrame

df = (df1.set_index(['Date','entry'])
         .mul(df2.T, level=0)
         .sum(axis=1)
         .reset_index(name='result'))
print (df)
         Date entry  result
0  2017-04-12     A      54
1  2017-04-12     B      58
2  2017-04-12     C      62
3  2017-04-13     A     146
4  2017-04-13     B     152
5  2017-04-13     D     158

推荐阅读