Python Pandas对比On/Off列与上一行值判断周期变化的实现问题
代码修正方案
你原有代码存在两处错误:
Machine On/Off列赋值为字符串类型的'1'和'0',后续滚动平均计算时会触发类型错误- 最后一行的列表推导式语法不成立,无法直接通过
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
相关产品推荐
相关产品推荐

