如何在Pandas中同时选取MultiIndex列与普通列?
解决混合MultiIndex与普通列的选取问题
当你的DataFrame列同时存在MultiIndex(如('rotation', 'x'))和普通字符串列(如'n_frames')时,直接混合使用元组和字符串选列会失败——原因是pandas要求列索引的元素类型统一,混合元组和字符串会导致匹配逻辑混乱。
解决方案步骤:
统一列索引格式
先把所有列名转换成相同长度的元组(和MultiIndex的层级数一致),缺失的层级用空字符串填充:import pandas as pd # 基于你的实际数据处理列索引 df.columns = pd.MultiIndex.from_tuples( [col if isinstance(col, tuple) else (col, '') for col in df.columns], names=['level1', 'level2'] # 可根据实际需求命名层级 )正确选取目标列
现在所有列都是元组格式,直接用元组指定即可同时选取两类列:# 选取('rotation', 'x')和('n_frames', '')列 selected_df = df.loc[:, [('rotation', 'x'), ('n_frames', '')]]
针对你给出的示例表格
原表格中列'2'属于普通列,统一格式后变为('2', ''),选取['0','A']和'2'的代码应为:
df.loc[:, [('0', 'A'), ('2', '')]]
其他便捷选取方式
如果想快速选取某一层级下的所有子列+普通列,也可以用层级筛选:
# 筛选level1为'rotation'且level2为'x',或level1为'n_frames'的列 mask = (df.columns.get_level_values(0) == 'rotation') & (df.columns.get_level_values(1) == 'x') | (df.columns.get_level_values(0) == 'n_frames') selected_df = df.loc[:, mask]
内容的提问来源于stack exchange,提问作者qkfsbxjayiedbe
相关产品推荐
相关产品推荐

