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

如何为DataFrame添加FAIL列:判断ID满足条件且无后续记录

解决巡检数据的FAIL标记问题

问题分析

需要为按DATE降序排列的巡检数据新增FAIL布尔列,标记规则为:

  • 当前行满足NUMERIC > 50且UNIT == 'psig'
  • 当前行是对应ID在DataFrame中的最后一行(即该ID在DataFrame的后续行中无其他记录)

代码实现

import pandas as pd

# 构造示例数据
data = {
    'DATE': ['2021-01-01', '2019-01-01', '2018-01-01', '2017-01-01', '2016-01-01'],
    'ID': [1, 1, 2, 3, 4],
    'NUMERIC': [55, 20, 55, 40, 55],
    'UNIT': ['psig', 'psig', 'psig', 'psig', 'cfpd']
}
df = pd.DataFrame(data)

# 转换DATE为datetime类型(确保日期逻辑正确)
df['DATE'] = pd.to_datetime(df['DATE'])

# 标记每个ID的最后一行(DataFrame中该ID后续无记录)
df['is_last_row'] = df.groupby('ID').cumcount(ascending=False) == 0

# 生成FAIL列
df['FAIL'] = (df['NUMERIC'] > 50) & (df['UNIT'] == 'psig') & df['is_last_row']

# 清理临时列
df = df.drop('is_last_row', axis=1)

print(df)

代码解释

  1. 日期类型转换:将DATE转为datetime类型,避免字符串排序可能出现的异常。
  2. 标记最后一行:通过groupby('ID').cumcount(ascending=False)为每个ID的行逆序编号,编号为0的行就是该ID在DataFrame中的最后一行(对应最早的巡检日期)。
  3. 生成FAIL列:同时满足数值条件、单位条件和最后一行标记的行,FAIL设为True,其余为False。

输出结果

DATE  ID  NUMERIC  UNIT   FAIL
0 2021-01-01   1       55  psig  False
1 2019-01-01   1       20  psig  False
2 2018-01-01   2       55  psig   True
3 2017-01-01   3       40  psig  False
4 2016-01-01   4       55  cfpd  False

内容的提问来源于stack exchange,提问作者Cat Schooley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:07:04