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

Pandas MultiIndex查询:第一级等值匹配+第二级isin集合筛选

Pandas MultiIndex 组合索引:第一级等值匹配+第二级isin集合匹配

问题场景

给定如下带有多层索引(MultiIndex)的Series:

import pandas as pd

first_key = ['a', 'b', 'c']
second_key = [1, 2, 3]

m_index = pd.MultiIndex.from_product([first_key, second_key],
                                     names=['first_key', 'second_key'])

series_with_index = pd.Series(0.0, index=m_index)

需要实现:将第一级索引为'a'且第二级索引属于集合{2, 3, 4}的所有值设置为1.0(注:第二级索引中不存在4,因此仅对存在的2、3生效)。

解决方案

下面提供三种简洁的实现方式:

方法1:使用pd.IndexSlice(推荐,可读性高)

IndexSlice是pandas专为多层索引设计的工具,能清晰表达复杂的索引筛选逻辑:

idx = pd.IndexSlice
series_with_index.loc[idx['a', [2, 3, 4]]] = 1.0
  • 第一级索引直接指定'a'做等值匹配
  • 第二级传入列表[2,3,4],自动匹配属于该集合的索引项,忽略不存在的4

方法2:布尔索引构造筛选条件

通过提取索引层级的值,组合布尔条件实现筛选:

# 构造布尔掩码
mask = (series_with_index.index.get_level_values('first_key') == 'a') & \
       (series_with_index.index.get_level_values('second_key').isin([2, 3, 4]))

# 赋值操作
series_with_index[mask] = 1.0
  • get_level_values('first_key')提取第一级索引的所有值,与'a'做等值判断
  • isin([2,3,4])判断第二级索引是否属于目标集合
  • 用&组合两个条件,得到最终的筛选掩码

方法3:直接使用loc的元组语法

利用loc对多层索引的原生支持,直接传入元组形式的筛选条件:

series_with_index.loc[('a', [2, 3, 4])] = 1.0

这种方式最为简洁,逻辑与方法1一致,自动忽略不存在的索引项。

验证结果

执行赋值后,打印Series可看到预期效果:

print(series_with_index)

输出:

first_key  second_key
a          1            0.0
           2            1.0
           3            1.0
b          1            0.0
           2            0.0
           3            0.0
c          1            0.0
           2            0.0
           3            0.0
dtype: float64

内容的提问来源于stack exchange,提问作者Ramón J Romero y Vigil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:10:32