You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效聚合两个DataFrame的国家权重,计算组合地理配置?

问题描述

我有一个名为a的DataFrame,以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的DataFrame,存储非基金类工具数据,包含asset_ID(工具isin码)、country(国家代码)和weight(权重)列:

asset_ID country  weight
0  US1912161007    U.S.   0.005
1  GB0007188757     U.K.   0.100

目标是聚合并求和两个DataFrame的国家权重,计算整个投资组合的地理配置。已通过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码和国家代码均唯一。

高效实现方法

可以利用Pandas的内置分组与向量化运算来高效完成,步骤如下:

  1. 对b按国家分组求和:
    将b中的权重按country列分组并求和,得到非基金类工具的各国家权重总和:

    b_country_sum = b.groupby('country')['weight'].sum()
    

    执行后得到:

    country
    U.S.    0.005
    U.K.    0.100
    Name: weight, dtype: float64
    
  2. 合并两个权重结果并求和:
    利用Pandas的add方法,将a的列求和结果与b的分组求和结果按国家索引对齐相加,对缺失的国家(如Canada)自动填充0,确保所有国家的权重都能被正确计算:

    a_sum = a.sum(axis=0, skipna=True)
    total_portfolio = a_sum.add(b_country_sum, fill_value=0)
    
  3. 查看最终结果:
    输出total_portfolio即可得到期望的投资组合地理配置:

    U.S.      0.475
    Canada    0.286
    U.K.      0.420
    dtype: float64
    

效率说明

这种方法完全基于Pandas的向量化操作,避免了手动循环,处理速度远快于逐行计算;同时自动处理索引对齐,无需提前匹配国家列表,适配a列数不固定的场景。

内容的提问来源于stack exchange,提问作者Ig_Ferr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:55:25