如何基于pf列获取P1-P5各组合标的数量及列表,是否可使用for循环实现
解决方案
前提说明
默认你的portfolio_id是一维Series结构,索引为标的代码(即你举例的s_0001、s_0004这类格式)。如果是多时间维度的分组结果,可先按时间字段筛选单个截面后再执行以下逻辑。
方案1:Pandas原生GroupBy实现(效率更高)
# 重置索引,将股票代码从索引转为普通列 port_df = portfolio_id.reset_index() port_df.columns = ['stock_id', 'portfolio'] # 统计P1-P5各组合的标的数量 port_count = port_df.groupby('portfolio')['stock_id'].count() print("各组合标的数量:") print(port_count) # 聚合生成每个组合的标的列表 port_stock_list = port_df.groupby('portfolio')['stock_id'].agg(list) # 按你要求的格式输出 for port_label in ["P1", "P2", "P3", "P4", "P5"]: stocks = ", ".join(port_stock_list[port_label]) print(f"{port_label.lower()} = {stocks}")
方案2:纯For循环实现
完全可以用for循环实现需求,代码如下:
# 初始化存储每个组合标的的字典 port_map = {"P1": [], "P2": [], "P3": [], "P4": [], "P5": []} # 遍历所有标的和对应的分组结果 for stock_id, port_label in portfolio_id.items(): port_map[port_label].append(stock_id) # 输出数量和标的列表 for port_label in ["P1", "P2", "P3", "P4", "P5"]: stock_str = ", ".join(port_map[port_label]) print(f"{port_label.lower()} = {stock_str}") print(f"{port_label}组合标的数量:{len(port_map[port_label])}\n")
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

