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

Python Pandas对比On/Off列与上一行值判断周期变化的实现问题

代码修正方案

你原有代码存在两处错误:

  1. Machine On/Off列赋值为字符串类型的'1'和'0',后续滚动平均计算时会触发类型错误
  2. 最后一行的列表推导式语法不成立,无法直接通过last变量获取上一行的取值

你可以使用pandas内置的shift()方法实现和上一行取值对比的需求,修正后的完整代码如下:

import pandas as pd
import numpy as np 

header_list = ['Time']

df = pd.read_csv('S8-1.csv' , skiprows=6 , names = header_list)
df[['Date/Time','Pressure']] = df.Time.str.split(",,", expand=True)
df.pop('Time')

# 类型转换
df['Pressure'] = pd.to_numeric(df['Pressure'], errors = 'coerce')
df['Date/Time'] = pd.to_datetime(df['Date/Time'], format = '%m/%d/%y %H:%M:%S.%f' , errors = 'coerce')

# 滚动平均计算
df['Moving Average'] = df['Pressure'].rolling(window=5).mean()
df['Rolling Average Center']= df['Pressure'].rolling(window=5, center=True).mean()

# 修正:这里返回数值1/0而非字符串,避免后续滚动平均报错
df['Machine On/Off'] = [1 if x >= 115 else 0 for x in df['Rolling Average Center']]

df['Moving Avg of Binary'] = df['Machine On/Off'].rolling(window=3).mean()

df['On/Off'] = ['On' if x > 0 else 'Off' for x in df ['Moving Avg of Binary']]

# 修正:用shift()获取上一行的On/Off值,对比生成Cycle change列
df['Cycle change'] = np.where(df['On/Off'] == df['On/Off'].shift(1), 'Same Cycle', 'Different cycle')

补充说明:首行因为不存在上一行数据,上述代码会默认将首行标记为Different cycle,如果你需要调整首行的标记值,可以在代码最后追加df.loc[0, 'Cycle change'] = '你需要的标记'做单独赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:57:03