基于同列前置行条件替换DataFrame的Status列行值
解决方案:基于前一行状态替换DataFrame中的Status值
步骤1:构造示例数据
先还原你提供的原始DataFrame:
import pandas as pd data = { 'Power': [1257, 1689, 897, 753, 514, 151, 77, 49, 16, 15, 77, 67, 90, 111], 'Status': ['Compressor']*6 + ['FanOnly']*2 + ['Controls']*2 + ['FanOnly']*4 } df = pd.DataFrame(data)
步骤2:核心替换逻辑
利用shift()方法获取前一行的Status值,结合双条件筛选需要替换的行:
# 获取前一行的Status(第一行无前置数据,会显示NaN) prev_status = df['Status'].shift(1) # 定义替换条件:当前行是FanOnly,且前一行是Compressor replace_condition = (df['Status'] == 'FanOnly') & (prev_status == 'Compressor') # 执行替换 df.loc[replace_condition, 'Status'] = 'Compressor'
验证结果
处理后的DataFrame与你期望的完全一致:
| Power | Status |
|---|---|
| 1257 | Compressor |
| 1689 | Compressor |
| 897 | Compressor |
| 753 | Compressor |
| 514 | Compressor |
| 151 | Compressor |
| 77 | Compressor |
| 49 | Compressor |
| 16 | Controls |
| 15 | Controls |
| 77 | FanOnly |
| 67 | FanOnly |
| 90 | FanOnly |
| 111 | FanOnly |
补充说明
你之前尝试lag/lead没成功,大概率是没同时满足当前行是FanOnly和前一行是Compressor这两个条件——只单一判断其中一个的话,要么会误替换其他FanOnly行,要么筛选范围不对。
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

