Pandas如何获取最后一次满足条件的行索引并赋值给指定列
Pandas 逐行计算最后一次满足条件的行索引实现方案
核心逻辑是利用pandas的条件赋值+向前填充能力,无需写循环逐行遍历,执行性能更高:
- 第一步:用
where方法做条件筛选,满足A > 0.5的行保留当前行索引,不满足的行赋值为NaN - 第二步:对筛选得到的序列做向前填充(
ffill),自动把上一个非NaN的有效索引填充到后续不满足条件的行,刚好匹配“截至当前行最后一次满足条件的索引”的需求 - 第三步:把填充后的结果赋值给新列
cond_index即可
可直接运行的代码示例
import pandas as pd import numpy as np # 构造测试数据集 df = pd.DataFrame({ 'A': [0.001566, 0.174676, 0.553506, 0.583377, 0.418854, 0.836482, 0.927756, 0.800908, 0.277646, 0.388323] }) # 一行代码完成计算 df['cond_index'] = df.index.where(df['A'] > 0.5, np.nan).ffill() # 如果需要cond_index为整数格式,可替换为下面这行,用pandas可空整数类型保留NaN # df['cond_index'] = df.index.where(df['A'] > 0.5, np.nan).ffill().astype('Int64')
运行输出结果
A cond_index 0 0.001566 NaN 1 0.174676 NaN 2 0.553506 2.0 3 0.583377 3.0 4 0.418854 3.0 5 0.836482 5.0 6 0.927756 6.0 7 0.800908 7.0 8 0.277646 7.0 9 0.388323 7.0
内容的提问来源于stack exchange,提问作者junyu
相关产品推荐
相关产品推荐

