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

横向合并DataFrame时为列名添加股票名称以实现列名唯一

问题描述

我通过for循环结合字典获取多只股票的DataFrame,代码框架如下:

d={}
fullset= pd.DataFrame ()
for name in stocklist:
    # 获取单只股票数据并存入d[name]的逻辑

目前使用以下代码横向合并数据集:

fullset= pd.concat([fullset, d[name]], axis=1)

所有数据集的列头完全相同,我需要在合并时将股票名称(即循环中的name变量)追加到对应DataFrame的每一列列名前,生成类似SPX-High、SPX-Low、Dow-High的列名。

*注:我了解层级列索引的方案,但未能成功实现;且后续需运行机器学习模型,不确定层级索引的兼容性,因此更倾向于直接为列名添加股票名称前缀。此前尝试使用concat的keys参数(如keys=d[name])及直接引用name变量,均未达到预期效果。

解决方案

方式一:循环内修改列名后合并

在循环中先为单只股票的DataFrame列名添加前缀,再执行合并操作:

d = {}
fullset = pd.DataFrame()
for name in stocklist:
    # 此处补充获取单只股票数据并存入d[name]的代码
    # 示例:d[name] = yf.download(name, start='2020-01-01', end='2024-01-01')
    
    # 为列名添加股票名称前缀
    d[name].columns = [f"{name}-{col}" for col in d[name].columns]
    # 合并到fullset
    fullset = pd.concat([fullset, d[name]], axis=1)

方式二:批量合并后扁平化列名(更高效)

若已将所有股票数据存入字典d,可一次性完成合并,再将层级列索引转为带前缀的普通列名,避免循环内反复concat的性能损耗:

# 假设字典d已包含所有股票的DataFrame
fullset = pd.concat(d.values(), axis=1, keys=d.keys())
# 将层级列索引转换为"股票名称-列名"格式
fullset.columns = [f"{stock}-{col}" for stock, col in fullset.columns]

这种方式在股票数量较多时,效率远高于循环逐次合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:17:42