我有一个名为"a"的数据帧,其中包含"isin"列(索引列(中带有isin代码的基金的地理权重:
U.S. Canada U.K.
isin
LU1739554647 0.08 0.210 0.11
LU0599946893 0.14 0.026 0.07
LU1460782227 0.25 0.050 0.14
然后,我有另一个名为"b"的数据帧和其他工具(不是基金(,并且只包含一列国家代码("country"(和权重("weight"(。asset_ID是仪器的isin代码:
asset_ID country weight
0 US1912161007 U.S. 0.005
1 GB0007188757 U.K. 0.100
我的目标是通过聚合和汇总两个数据帧中国家的权重来计算整个投资组合的地理分配。要做到这一点,首先我用这行代码a.sum(axis = 0, skipna = True)
和这个输出对数据帧"a"中每一列的列值求和:
U.S. 0.470
Canada 0.286
U.K. 0.320
在这一点上,我不知道如何用数据帧"b"聚合和求和上述输出的值。无序输出结果如下:
U.S. 0.475
Canada 0.286
U.K. 0.420
最有效的方法是什么?我指定数据帧"a"可以有可变数量的列,列的数量与国家/地区的数量一样多,并且isin代码和国家/地区代码始终是唯一的。谢谢
通过DataFrame.mul
和sum
:使用具有多个值的DataFrame.pivot
s = df1.mul(df2.pivot('asset_ID','country','weight'), fill_value=1).sum()
print (s)
Canada 0.286
U.K. 0.420
U.S. 0.475
dtype: float64