将系列和数据帧相乘

时间:2017-10-25 09:51:44

标签: python pandas dataframe matrix-multiplication series

假设我有一系列金额(让我们考虑使其更多地进行交易)我希望将这些金额分配给人们(franco,franchino和gianmarco)。

import pandas as pd
import numpy as np
moneys = pd.Series({'a':1, 'b':3, 'c':10, 'd':9, 'e':7})
percentages = pd.DataFrame({'franco':[0.1],'franchino':[0.5],'gianmarco':[0.4]})

enter image description here

在这种情况下,我想获得如下的矩阵5x3:

enter image description here

是否有类似于pd.multiply或.dot的功能才能完成工作?

2 个答案:

答案 0 :(得分:1)

使用df.dot

moneys.to_frame().dot(percentages)

   franchino  franco  gianmarco
a        0.5     0.1        0.4
b        1.5     0.3        1.2
c        5.0     1.0        4.0
d        4.5     0.9        3.6
e        3.5     0.7        2.8

这与您的预期结果相同,最后两列是置换的。

答案 1 :(得分:1)

你可以

In [5868]: pd.DataFrame(percentages.values * moneys.values[:, np.newaxis], 
                        columns=percentages.columns, index=moneys.index)
Out[5868]:
   franchino  franco  gianmarco
a        0.5     0.1        0.4
b        1.5     0.3        1.2
c        5.0     1.0        4.0
d        4.5     0.9        3.6
e        3.5     0.7        2.8

详细

In [5869]: percentages.values * moneys.values[:, np.newaxis]
Out[5869]:
array([[ 0.5,  0.1,  0.4],
       [ 1.5,  0.3,  1.2],
       [ 5. ,  1. ,  4. ],
       [ 4.5,  0.9,  3.6],
       [ 3.5,  0.7,  2.8]])