计算pandas中分组数据的权重

时间:2015-08-04 14:02:45

标签: python pandas

我想用熊猫数据框计算投资组合权重。以下是一些虚拟数据示例:

df1 = DataFrame({'name' : ['ann','bob']*3}).sort('name').reset_index(drop=True)
df2 = DataFrame({'stock' : list('ABC')*2})
df3 = DataFrame({'val': np.random.randint(10,100,6)})
df = pd.concat([df1, df2, df3], axis=1)

enter image description here

每个人拥有3只股票,价值为val。我们可以像这样计算投资组合权重:

df.groupby('name').apply(lambda x: x.val/(x.val).sum())

给出了这个:

enter image description here

如果我想将wgt列添加到df,我需要将此结果合并回dfname上的index。这看起来相当笨重。

有没有办法一步到位?或者,最好地利用熊猫特征的方法是什么?

1 个答案:

答案 0 :(得分:3)

使用transform,这将返回一个索引与原始df对齐的系列:

In [114]:
df['wgt'] = df.groupby('name')['val'].transform(lambda x: x/x.sum())
df

Out[114]:
  name stock  val       wgt
0  ann     A   18  0.131387
1  ann     B   43  0.313869
2  ann     C   76  0.554745
3  bob     A   16  0.142857
4  bob     B   44  0.392857
5  bob     C   52  0.464286