Pandas如何获取DataFrame中指定值对应的相对行号
问题说明
通过df.loc裁剪得到的子DataFrame会保留原始母表的行索引,直接使用df.index[df.value == 目标值]拿到的是原始索引值,而非子表内从0开始计数的相对行号。以给出的示例数据为例,值为32400的行原始索引为1450,在当前子表中的相对行号为2。
实现方案
以下方法均可以拿到目标相对行号,可根据使用场景选择:
- 重置索引后匹配
先重置子表索引、丢弃原始索引生成从0开始的连续行号,再做匹配即可:# drop=True表示不将原始索引保留为单独列 df_temp = df.reset_index(drop=True) rel_pos = df_temp.index[df_temp.value == 32400][0] # 执行后rel_pos的值为2 - 用numpy.where直接定位
无需修改原表,借助numpy的where方法直接识别布尔判断结果中True值的位置:import numpy as np rel_pos = np.where(df.value == 32400)[0][0] # 返回结果为2 - 布尔序列直接取位置
无需额外导包,直接对值匹配生成的布尔序列取第一个True值的位置即可:# 仅适用于确定匹配值唯一存在的场景 rel_pos = (df.value == 32400).argmax() # 返回结果为2
注意事项:如果目标值在表中存在多个匹配行,以上方法默认返回第一个匹配项的相对位置;如果目标值不存在,
argmax方法会错误返回0,建议使用前先做存在性判断:if 32400 in df.value.to_list()再执行位置提取。
内容的提问来源于stack exchange,提问作者hugo.d
相关产品推荐
相关产品推荐

