我有一个填充有时间序列温度数据的数据框,需要根据温度将设备状态标记为“好”或“坏”。如果介于35到45之间,则为“好”,否则为“不良”。但是,我想添加一个条件,如果它在被列为“不良”后返回到适当的温度范围,则必须至少持续两天为“良好”,然后才能再次标记为“良好”。到目前为止,我可以在一个更基本的级别上进行标签,但是要努力实现更复杂的标签开关。
df['status'] = ['bad' if x <35 or x >45 else 'good' for x in df['temp']]
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
import numpy as np
df['status'] = np.where((df['temp']>35) | (df['temp']>45) , 'bad', 'good')
这应该可以解决问题。
答案 1 :(得分:1)
这样的方法呢?
您可以为每行设置一个group_check函数,并从更大的df检查该行中组内是否有相邻的有害温度。
这只会检查以前的测量值。您需要对当前测量值进行快速布尔检查,以确认先前的测量值是正确的并且当前测量值是正确的。
def group_check_maker(index, row):
def group_check(group):
if len(group) > 1:
if index in group.index:
failed_status = False
for index2, row2 in group.drop(index).iterrows():
if (row['Date'] > row2['Date']) and (row['Date'] - row2['Date'] < pd.Timedelta(days = 2)) and (row2['Temperature'] < 35 or row2['Temperature'] >45):
failed_status = True
if failed_status:
return 'Bad'
else:
return 'Good'
return group_check
def row_checker_maker(df):
def row_checker(row):
group_check = group_check_maker(row.name, row)
return df[df['Equipment ID'] == row['Equipment ID']].groupby('Equipment ID').apply(group_check).iloc[0]
return row_checker
row_checker = row_checker_maker(df)
df['Neighboring Day Status'] = df.apply(row_checker, axis = 1)
答案 2 :(得分:0)