Векторизованное скалярное произведение в pandas - PullRequest
1 голос
/ 17 марта 2020

У меня есть два кадра данных, df1 индексируется по дате и содержит некоторые числа c значения val1, val2 для продуктов / записей A, B, ...:

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

Я знаю, что цикл по датам работает.

1 Ответ

3 голосов
/ 17 марта 2020

Используйте DataFrame.mul с MultiIndex in df1 с транспонированием 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
...