You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame如何基于连续状态最后一次有效出现获取对应值

实现方法

核心逻辑是直接定位每个连续相同Status分段的末尾行,给末尾行赋值对应Energy值,其余行填充空值即可,不需要复杂的cumsum重置逻辑。

完整可运行代码

import pandas as pd
import numpy as np

# 构造样例数据
df = pd.DataFrame({
    'Status': [1,1,1,1,0,0,0,1,0,0],
    'Energy': [2,3,2,4,12,13,11,3,15,14]
})

# 识别连续段末尾:当前行Status和下一行Status不相等,即为段尾(最后一行自动判定为段尾)
is_segment_end = df['Status'].ne(df['Status'].shift(-1))

# 赋值结果列
df['Result_outcome'] = np.where(is_segment_end, df['Energy'], np.nan)

结果验证

运行代码后输出的DataFrame和预期完全一致:

Status  Energy  Result_outcome
0       1       2             NaN
1       1       3             NaN
2       1       2             NaN
3       1       4             4.0
4       0      12             NaN
5       0      13             NaN
6       0      11            11.0
7       1       3             3.0
8       0      15             NaN
9       0      14            14.0

逻辑说明

  • df['Status'].shift(-1):将Status列整体向上移1位,每行拿到下一行的Status值
  • ne()是不等于判断:当当前行Status和下一行Status不相等时,说明当前行是连续同值段的最后一行;DataFrame最后一行没有下一行,移位后得到空值,ne()和空值比较会返回True,自动判定为最后一个分段的末尾,不需要额外补边界逻辑
  • 该方法是向量化运算,性能远高于循环、分组apply写法,百万级数据也可快速运行

内容的提问来源于stack exchange,提问作者prashant thakre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:54:19