如何从多级列索引的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
相关产品推荐
相关产品推荐

