如何使用pandas MultiIndex查询多级列索引下的指定二级列数据
Pandas多级列索引多二级列批量查询方案
第一步:构造符合场景的测试数据
import pandas as pd # 构造多级列索引 columns = pd.MultiIndex.from_tuples( [ ('double-double', 'ketchup'), ('double-double', 'mustard'), ('double-double', 'relish'), ('triple', 'ketchup'), ('triple', 'mustard'), ('triple', 'relish') ], names=['汉堡品类', '调料品类'] ) # 构造测试数据 data = [ [3,3,3,4,5,5], [3,5,2,3,3,2] ] index = ["Beep's Burgers", "Roadhouse"] df = pd.DataFrame(data, index=index, columns=columns)
第二步:两种实现查询的方法
方法1:使用pd.IndexSlice(推荐,灵活度最高)
该语法是pandas专为多级索引切片设计的工具,可读性最高:
# 初始化索引切片器 idx = pd.IndexSlice # 逗号前的冒号表示取所有行,列维度第一个冒号表示取所有一级索引,后接列表指定要筛选的二级索引 result = df.loc[:, idx[:, ['ketchup', 'mustard']]]
返回结果结构:
| 店铺名称 | double-double | triple | ||
|---|---|---|---|---|
| ketchup | mustard | ketchup | mustard | |
| Beep's Burgers | 3 | 3 | 4 | 5 |
| Roadhouse | 3 | 5 | 3 | 3 |
方法2:使用xs跨截面查询
仅需要按指定层级匹配值时,也可以用cross-section方法实现:
# axis=1表示操作列索引,level=1指定匹配二级索引,drop_level=False保留原始多级索引结构 result = df.xs(key=['ketchup', 'mustard'], level=1, axis=1, drop_level=False)
两种方法返回的结果完全一致,可根据使用习惯选择。
内容的提问来源于stack exchange,提问作者Misha Lubich
相关产品推荐
相关产品推荐

