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
相关产品推荐
相关产品推荐

