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

Pandas中将ticker对应DataFrame数据添加到另一目标DataFrame指定列的方法

实现方案

你可以先把所有ticker的行情数据汇总成和mean_df索引规则一致的总表,再一次性合并,具体实现步骤如下:

  • 循环获取每个ticker的行情数据时,补充ticker标识,调整索引结构和mean_df匹配
  • 所有ticker数据拼接完成后,直接通过索引关联合并到mean_df

参考修改代码:

import pandas as pd

# 存储所有ticker的行情数据
price_res = []

for ticker in tickers:
    df_eod_price = get_fin_data(ticker)
    df_eod_price2 = df_eod_price.drop(['Open', 'High','Low','Close','Volume'], axis=1)
    df_eod_price2['Returns'] = df_eod_price2['Adj Close']/df_eod_price2['Adj Close'].shift(1) - 1
    # 补充ticker列,调整日期字段格式和索引
    df_eod_price2['ticker'] = ticker
    df_eod_price2 = df_eod_price2.reset_index().rename(columns={'Date': 'date'})
    # 保证date字段格式和mean_df的date完全一致,若mean_df的date是datetime类型可删除下面这行
    df_eod_price2['date'] = df_eod_price2['date'].dt.strftime('%Y-%m-%d')
    # 设置和mean_df一致的多级索引
    df_eod_price2 = df_eod_price2.set_index(['ticker', 'date'])
    price_res.append(df_eod_price2)

# 拼接所有行情数据
all_price = pd.concat(price_res)

# 合并到mean_df,左连接保留原有mean_df的全部数据
mean_df = mean_df.join(all_price, how='left')

如果不习惯操作索引,也可以用merge方法实现:

# 重置mean_df的索引转为普通列
mean_df = mean_df.reset_index()
# 合并数据
mean_df = mean_df.merge(all_price.reset_index(), on=['ticker', 'date'], how='left')
# 合并后可重新设置回多级索引
mean_df = mean_df.set_index(['ticker', 'date'])

注意事项:

  • 合并前需确认两个表的ticker命名、date字段的格式/类型完全一致,否则会出现匹配失败生成空值的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:02