pandas中选取多层索引DataFrame最后一行保留索引并追加到字典
Pandas多层索引DataFrame提取指定行存入字典实现方案
核心实现逻辑
针对多层索引(MultiIndex)结构的DataFrame,先通过索引切片定位到目标索引组合对应的所有行,取子集最后一行后,将多层索引值与行内字段共同转换为字典格式追加到信号存储字典中,全程不会丢失索引信息。
具体实现步骤
假设你的多层索引DataFrame变量名为df,两层索引顺序为「股票代码层、交易时间层」,存储买卖信号的字典变量名为trade_signals。
- 定位目标索引组的行数据
使用loc传入多层索引元组做切片,筛选出索引为(HK.00700, 2022-06-28 10:39:00)对应的全量行:
# 筛选指定索引组合的所有行 target_subset = df.loc[("HK.00700", "2022-06-28 10:39:00"), :]
- 提取子集最后一行
用iloc[-1]取筛选结果的最后一行,返回的Series对象会自带原多层索引信息:
last_trade_row = target_subset.iloc[-1]
- 合并索引信息与行数据,存入字典
将Series转成字典后,补充多层索引对应的字段,再追加到信号字典即可:
# 行数据转字典 signal_info = last_trade_row.to_dict() # 提取多层索引值,补充到字典中 signal_info["symbol"], signal_info["trade_time"] = last_trade_row.name # 追加到信号存储字典,key可根据自身业务规则调整 trade_signals["HK.00700"] = signal_info
简便写法
如果不需要分步调试,可以直接用一行代码完成提取转换:
trade_signals["HK.00700"] = df.loc[("HK.00700", "2022-06-28 10:39:00")]\ .iloc[[-1]]\ .reset_index()\ .iloc[0]\ .to_dict()
注意事项
- 如果你的DataFrame多层索引顺序和示例不一致,调整
loc中元组内的元素顺序,和索引层级一一对应即可 - 建议提前用
df.sort_index(inplace=True)对多层索引排序,能大幅提升索引切片的定位速度 - 字典内的字段名、存储key可以根据自身的信号结构规则灵活调整,不需要硬套固定字段
内容的提问来源于stack exchange,提问作者helloworld
相关产品推荐
相关产品推荐

