如何查找DataFrame列指定值最后出现位置并替换其后方的其他值
实现代码及说明
首先修正你现有代码的小疏漏:你的DataFrame列名为label,原有代码中df['labels']多了后缀s,调整后完整实现如下:
完整可运行代码
import pandas as pd # 构造示例DataFrame,和你提供的样例一致 df = pd.DataFrame({ 'label': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'B', 'C'] }) # 1. 获取"A"最后一次出现的索引,你可以沿用自己的逻辑调整后使用: last_a_idx = max(loc for loc, val in enumerate(df['label']) if val == 'A') # 也可以用更简洁的pandas原生写法替代上面的索引获取逻辑,效果一致: # last_a_idx = df[df['label'] == 'A'].index[-1] # 2. 生成expected label列,将最后一个"A"之后的值替换为"H" df['expected label'] = df['label'] df.loc[df.index > last_a_idx, 'expected label'] = 'H'
运行结果
执行后输出的df如下,符合你的需求:
label expected label 0 A A 1 B B 2 C C 3 A A 4 B B 5 C C 6 A A 7 B H 8 C H 9 B H 10 C H
逻辑说明
- 通过pandas的
loc索引器筛选出所有索引大于最后一个"A"的索引的行 - 直接对筛选出的行的
expected label列批量赋值为H,pandas的广播特性会自动处理所有符合条件的行,无需循环遍历
内容的提问来源于stack exchange,提问作者Pallavi C
相关产品推荐
相关产品推荐

