如何合并yfinance实时拉取多标的时拆分在多行的最新K线数据
yfinance多标的实时K线拆分多行合并方案
核心逻辑
该拆分问题是因为不同标的的实时数据推送时间存在微小差异,yfinance会为每个不同的推送时间生成独立行,仅填充对应推送标的的指标值。不需要关心时间差的情况下,直接提取每列最新的非空值合并即可。
实现代码
前置依赖
你需要已经拉取到原始yfinance返回的MultiIndex列DataFrame,示例拉取代码如下:
import yfinance as yf import pandas as pd # 最多支持10个标的,按需替换即可 target_tickers = ["BARC.L", "BKG.L"] df = yf.download( tickers=target_tickers, period="1d", interval="1m", group_by="column" )
合并处理代码
# 方案1:轻量快速实现,适合数据量不大的场景 # 前向填充所有非空值到后续行,取最后一行即为全标的最新数据 latest_merged = df.ffill().iloc[[-1]] # 统一设置时间为所有数据的最新时间 latest_merged.index = [df.index.max()] # 输出结果 print(latest_merged)
如果原始数据量很大,不需要填充全表,可以用以下方案直接提取每列最新非空值:
# 方案2:高性能实现,适合大尺寸原始表 latest_merged = df.apply(lambda col: col.dropna().iloc[-1] if not col.dropna().empty else pd.NA).to_frame().T latest_merged.index = [df.index.max()]
效果验证
用你提供的示例数据处理后,输出结果如下:
Open Volume BARC.L BKG.L BARC.L BKG.L 2021-11-11 08:07:10+00:00 194.539993 4326.0 0.0 0.0
完全符合合并所有最新数据到单行的需求。
内容的提问来源于stack exchange,提问作者Borut Flis
相关产品推荐
相关产品推荐

