如何在Pandas中添加记录指定值最后出现索引的列
高效实现:为DataFrame添加指定值最后出现的索引列
针对你处理大型DataFrame时循环效率低的问题,可以用pandas的向量化操作来实现,时间复杂度为O(n),远快于循环方案。
实现步骤与代码
- 先构造示例DataFrame:
import pandas as pd df = pd.DataFrame({0: [1,5,4,1,7,9]})
- 核心实现逻辑:
- 先创建临时列,仅在原列值等于目标值(这里是1)时记录当前索引,其余位置设为
NaN - 对临时列执行向前填充(ffill),这样每个位置都会继承最近一次出现目标值的索引
- 将填充后的列作为新列加入原DataFrame
代码如下:
# 目标值 target = 1 # 创建临时列:匹配目标值时取索引,否则为NaN temp_col = df.index.where(df[0] == target) # 向前填充,得到每个位置最近的目标值索引 df[1] = temp_col.ffill()
执行后得到的结果完全符合你的需求:
0 1 0 1 0.0 1 5 0.0 2 4 0.0 3 1 3.0 4 7 3.0 5 9 3.0
如果需要整数类型,可以用df[1] = temp_col.ffill().astype(int)转换。
为什么这个方法高效?
pandas的where和ffill都是基于底层C实现的向量化操作,避免了Python循环的开销,处理百万级甚至更大的DataFrame时性能提升非常明显。
内容的提问来源于stack exchange,提问作者whaddaplaya
相关产品推荐
相关产品推荐

