如何在多级索引DataFrame中显示两列的匹配行?
筛选多级列DataFrame中sub_col1与sub_col2值匹配的行
你的DataFrame采用了多级列索引结构,要筛选出sub_col1和sub_col2值相等的行,可按以下步骤操作:
- 定位目标子列:通过多级列索引精准获取
('col1', 'sub_col1')和('col2', 'sub_col2')两列数据 - 生成筛选掩码:比较两列的元素是否相等,得到一个布尔类型的Series
- 应用掩码筛选:用布尔Series对原DataFrame进行索引,提取符合条件的行
具体代码实现
import pandas as pd # 你的DataFrame创建代码 multi_index = pd.MultiIndex.from_tuples( [("r0", "rA"), ("r1", "rB"), ("r4", "rB")], names=["Courses", "Fee"] ) cols = pd.MultiIndex.from_tuples([("col1", "sub_col1"), ("col2", "sub_col2")]) data = [[100, 300], [200, 500], [500, 500]] # 调整第三行数据,构造一个匹配示例 df = pd.DataFrame(data, columns=cols, index=multi_index) # 生成筛选条件:sub_col1与sub_col2值相等 mask = df[('col1', 'sub_col1')] == df[('col2', 'sub_col2')] # 应用筛选条件得到结果 filtered_df = df[mask] print(filtered_df)
输出结果
col1 col2 sub_col1 sub_col2 Courses Fee r4 rB 500 500
灵活适配方案
如果多级列的第一层名称不固定,仅需匹配第二层的sub_col1和sub_col2,可以通过xs方法直接按第二层索引定位子列,提升代码通用性:
mask = df.xs('sub_col1', level=1, axis=1) == df.xs('sub_col2', level=1, axis=1) filtered_df = df[mask]
内容的提问来源于stack exchange,提问作者yoopiyo
相关产品推荐
相关产品推荐

