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

如何从多级列索引的DataFrame中筛选GBP的HIGH列数据

多级列索引DataFrame筛选第二级列方法

问题背景

已通过df[["GBP"]]从两级列索引的DataFrame中筛选出第一级列为GBP的数据,需进一步筛选第二级列为HIGH的列。

原始数据:

Security    GBP             EUR             CHF
Field       HIGH    LOW     HIGH    LOW     HIGH    LOW
Date                        
2016-03-03  1.4194  1.403   1.0972  1.0851  0.999   0.9888
2016-03-04  1.4247  1.4105  1.1042  1.09    0.9988  0.9874
2016-03-07  1.4282  1.4132  1.1025  1.0938  1.0013  0.9922
2016-03-08  1.4274  1.4171  1.1057  1.099   0.9971  0.9897
2016-03-09  1.4241  1.4174  1.1035  1.0944  1.0035  0.9938

df[["GBP"]]执行结果:

Security    GBP            
Field       HIGH    LOW    
Date                        
2016-03-03  1.4194  1.403   
2016-03-04  1.4247  1.4105
2016-03-07  1.4282  1.4132  
2016-03-08  1.4274  1.4171  
2016-03-09  1.4241  1.4174  

实现方法

方法1:直接通过多级索引元组筛选

直接指定两级列名的元组,一步到位获取目标列:

# 获取Series格式结果
df[("GBP", "HIGH")]

# 获取DataFrame格式结果(保留列索引结构)
df[[("GBP", "HIGH")]]

执行df[[("GBP", "HIGH")]]的结果:

Security    GBP
Field       HIGH
Date                        
2016-03-03  1.4194
2016-03-04  1.4247
2016-03-07  1.4282
2016-03-08  1.4274
2016-03-09  1.4241

方法2:基于已筛选的GBP子集继续筛选

先保存GBP子集,再通过xs方法或索引定位筛选第二级列:

# 先获取GBP子集
gbp_df = df[["GBP"]]

# 方法2.1:用xs方法指定level筛选
gbp_df.xs("HIGH", level="Field", axis=1)

# 方法2.2:用loc指定多级索引
gbp_df.loc[:, ("GBP", "HIGH")]

若要保持DataFrame的多级列索引结构,可给xs添加drop_level=False参数:

gbp_df.xs("HIGH", level="Field", axis=1, drop_level=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:05:33