панды создают логический столбец в df

#python #pandas

Вопрос:

Вот некоторые сделанные данные:

 import pandas as pd
import numpy as np
import operator

rows,cols = 8760,3
data = np.random.rand(rows,cols) 
tidx = pd.date_range('2019-01-01', periods=rows, freq='1T') 
df = pd.DataFrame(data, columns=['Mix_Temp','Outside_Temp','Return_Temp'], index=tidx)
 

Как я могу создать другой столбец pandas, который является логическим значением True или False, на основе условия неисправности, которое я включил в функцию:

 def fault_condition_two_(dataframe):
    return operator.truth(dataframe.Mix_Temp   dataframe.mat_err < min((dataframe.Return_Temp - dataframe.rat_err) , (dataframe.Outside_Temp - dataframe.oat_err)))
 

Есть некоторые дополнительные params ниже, если я попробую это:

 # params
rat_err = 2.
mat_err = 5.
oat_err = 5. 

# make columns out of params
df['rat_err'] = rat_err
df['mat_err'] = mat_err
df['oat_err'] = oat_err

# run data thru function
df['bool_flag'] = fault_condition_two_(df)
 

Я получу эту известность ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). , которую, кажется, не могу найти лучшего решения. Любые советы будут очень признательны.

Обратите внимание, что мне действительно повезло использовать оператор Python с этой функцией ниже в другом уравнении состояния неисправности, где это отлично сработало. Какая лучшая практика? Эта функция работает нормально, без ошибок:

 def fault_condition_one(dataframe):
    return operator.and_(dataframe.duct_static < dataframe.duct_static_setpoint, dataframe.vfd_speed >= dataframe.vfd_speed_percent_max - dataframe.vfd_speed_percent_err_thres)
 

Ответ №1:

IIUC использует версию numpy для min by numpy.minimum. , здесь operator.truth нет необходимости:

 def fault_condition_two_(dataframe):
    return (dataframe.Mix_Temp   dataframe.mat_err < np.minimum((dataframe.Return_Temp - dataframe.rat_err) , (dataframe.Outside_Temp - dataframe.oat_err)))
 

Ответ №2:

Альтернатива, использующая только прямые манипуляции с кадрами данных:

 ((df.Mix_Temp   df.mat_err) < (df.Return_Temp - df.rat_err))
amp; ((df.Mix_Temp   df.mat_err) < (df.Return_Temp - df.rat_err))