如何为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)
代码解释
- 日期类型转换:将
DATE转为datetime类型,避免字符串排序可能出现的异常。 - 标记最后一行:通过
groupby('ID').cumcount(ascending=False)为每个ID的行逆序编号,编号为0的行就是该ID在DataFrame中的最后一行(对应最早的巡检日期)。 - 生成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
相关产品推荐
相关产品推荐

