假设我有一系列金额(让我们考虑使其更多地进行交易)我希望将这些金额分配给人们(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的功能才能完成工作?
答案 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]])