将系列和数据框相乘

Multiplying a series and a dataframe

假设我有一系列的金额(让我们想想钱让它更有趣)我想把这些金额分配给人们(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]})

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

是否有类似于 pd.multiply 或 .dot 的函数来完成这项工作?

使用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

这与您的预期结果相同,只是最后两列进行了排列。

你可以

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]])