如何使用PowerQuery分步完成多级持股比例的乘积计算
多级股权穿透计算解决方案
基础单链路穿透场景

该场景为单条股权链路的比例乘积计算,两种常用实现方式如下:
- 电子表格(Excel/Google Sheets/WPS表格)实现
新增辅助列按从最高级母公司到标的公司的顺序标记层级,使用PRODUCT函数配合条件判断即可完成计算。公式参考:=PRODUCT(IF(层级列>=当前计算层级,持股比例列,1)),数组公式需按Ctrl+Shift+Enter触发数组计算,最终输出结果即为最高级母公司对标的公司的最终持股比例。 - Python Pandas实现
先对数据按层级排序,调用累积乘积函数即可快速得到结果,代码示例:import pandas as pd # 读取你的股权数据文件 df = pd.read_excel("股权数据.xlsx") # 按层级从高到低排序,最高级母公司排在最前,标的公司排在最后 df = df.sort_values("层级", ascending=False) # 计算累积乘积,最后一行的计算结果就是最终持股比例 df["累积持股比例"] = df["持股比例"].cumprod() print("最终持股比例:", df.iloc[-1]["累积持股比例"])
复杂多母公司穿透场景

该场景需要先梳理每个母公司到标的公司的所有独立持股路径,单条路径比例相乘后再对同一主体的所有路径结果求和,实现方式如下:
- 电子表格实现
手动梳理每个待计算母公司到标的公司的所有持股路径,每条路径单独用PRODUCT计算路径持股比例,最后用SUM函数对同一母公司的所有路径比例求和,即可得到该母公司的最终持股比例。 - Python 有向图遍历实现
用networkx库构建股权有向图,遍历待计算母公司到标的公司的所有路径,求和所有路径的比例乘积即可,代码示例:import networkx as nx # 初始化有向图 G = nx.DiGraph() # 批量添加股权关系,格式为(股东名称, 被投公司名称, {"weight": 持股比例}) G.add_edges_from([ ("六级母公司", "五级母公司", {"weight": 1}), ("五级母公司", "四级母公司", {"weight": 1}), ("二级母公司", "一级母公司", {"weight": 0.8}), ("一级母公司", "标的公司", {"weight": 0.4}) # 其余所有股权关系按上述格式补充即可 ]) def calculate_total_ratio(parent_company, target_company): total = 0 # 遍历所有从母公司到标的公司的简单路径 for path in nx.all_simple_paths(G, source=parent_company, target=target_company): path_ratio = 1 # 计算单条路径的持股比例乘积 for i in range(len(path)-1): path_ratio *= G[path[i]][path[i+1]]["weight"] total += path_ratio return total # 调用示例:计算六级母公司对标的公司的持股比例 print(calculate_total_ratio("六级母公司", "标的公司"))
内容的提问来源于stack exchange,提问作者Hugo Terpstra
相关产品推荐
相关产品推荐

