如何在Pandas Series中查找指定字符串索引及重复值首尾出现位置
Pandas Series 指定值索引查询方案
1. 获取所有匹配值的索引
不管是否存在重复值,都可以通过布尔掩码筛选后取index属性得到全量匹配索引:
import pandas as pd # 示例含重复值的Series s = pd.Series(["koala", "dog", "chameleon","dog"]) # 筛选所有值为dog的行,取索引 all_match_index = s[s == "dog"].index print(all_match_index) # 输出:Index([1, 3], dtype='int64')
如果是无重复值的场景,直接取下标0即可得到唯一索引:s[s == "dog"].index[0]
2. 获取指定值首次出现的索引
两种常用实现方式:
- 调用
idxmax()方法:布尔序列中True对应数值为1,第一次出现的最大值位置就是首次匹配的索引
first_index = (s == "dog").idxmax() print(first_index) # 输出:1
- 直接取匹配索引列表的第一个元素
first_index = s[s == "dog"].index[0]
3. 获取指定值末次出现的索引
两种常用实现方式:
- 反转序列后调用
idxmax(),得到的就是原序列末次匹配的索引
last_index = (s == "dog")[::-1].idxmax() print(last_index) # 输出:3
- 直接取匹配索引列表的最后一个元素
last_index = s[s == "dog"].index[-1]
注意事项
如果不确定目标值是否存在于Series中,建议先做存在性校验,避免索引为空时取下标抛出IndexError异常:
target = "dog" if target in s.values: first_idx = s[s == target].index[0] last_idx = s[s == target].index[-1] print(f"首次出现索引:{first_idx},末次出现索引:{last_idx}") else: print(f"Series中不存在值为{target}的元素")
以上方法兼容你使用的Python 3.9 + pandas环境,无需额外依赖。
内容的提问来源于stack exchange,提问作者Death Metal
相关产品推荐
相关产品推荐

