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