我有两个数据框,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
我知道循环日期是可行的。
答案 0 :(得分:3)
使用DataFrame.mul
和MultiIndex in df1
并转置df2
,然后每行sum
并将Series.reset_index
的MultiIndex Series
转换为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