python - 熊猫中的矢量化点积?
问题描述
我有两个数据框,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
我知道循环日期是有效的。
解决方案
DataFrame.mul
与MultiIndex in df1
transpose一起使用df2
,然后sum
按行使用并转换MultiIndex Series
为:Series.reset_index
DataFrame
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
推荐阅读
- sql - 使用带有自外键的递归
- javascript - 如何在电子应用程序中获取持久权限?
- c++ - 在#include 预处理器命令中使用 qmake 变量
- google-cloud-sql - 如何连接和访问 gcloud mysql?
- java - 用于调用跟踪检测的 Java ASM 库
- java - java中的对象锁定具有一些属性值
- elasticsearch - Kibana - 分组并获取每个组的最新记录
- java - 用 application.properties 覆盖默认的 Spring-Boot application.properties
- testing - 如何在 JMeter 中仅使用包含 20 个用户的 CSV 文件中的前 5 个用户?
- tensorflow - 找到我需要为 lstm 构建自定义 tflite 的标头