У меня есть датафрейм, успешно выполняющий эквивалент оператора Averageifs в Excel, но я не знаю, как добавить этот синтаксис «исключить».Я хочу получить среднее значение всех Units_Ordered для этого Customer_Number и Product, кроме той строки Order_Number.Я думаю, что это будет что-то вроде Where Not
, но я не знаю, как реализовать.
Логически, это исключает этот конкретный порядок из среднего в случае, если этот порядок является ошибкой (цели отчета).
#SQL Query
SQLCommand =("SELECT DISTINCT RMORHP.ORHORDNUM AS 'Order_Number', RMORHP.ORHCRTDTE AS 'Order_Create_Date', RMORHP.ORHCRTUSR AS 'Created By', CONCAT(RMORHP.ORHCUSCHN,'-',RMORHP.ORHCUSNUM) AS 'Customer_Number', RMORHP.ORHCUSCHN AS 'Chain ID', RMORHP.ORHCUSNUM AS 'Cust ID', RMCUSP.CUSCUSNAM AS 'Customer Name', RMORDP.ORDITMNUM AS 'Product', RMITMP.ITMLNGDES AS 'Product Name', RMORDP.ORDADJQTY AS 'Units_Ordered'"
" FROM BIDW_DataLake.eRMS.RMCUSP RMCUSP, BIDW_DataLake.eRMS.RMITMP RMITMP, BIDW_DataLake.eRMS.RMORDP RMORDP, BIDW_DataLake.eRMS.RMORHP RMORHP"
" WHERE (RMORHP.ORHCRTDTE Between ? And ?) AND (RMCUSP.CUSCUSCHN=RMORHP.ORHCUSCHN) AND (RMCUSP.CUSCUSNUM=RMORHP.ORHCUSNUM) AND (RMORHP.ORHORDNUM=RMORDP.ORDORDNUM) AND (RMORDP.ORDITMNUM=RMITMP.ITMITMNUM) AND (RMCUSP.CUSDFTDCN=505)")
df = pd.read_sql_query(SQLCommand, cnxn, params=(qtrprior,today,))
df['Avg_Units_Ordered'] = (df.groupby(['Customer_Number','Product'])['Units_Ordered'].transform('mean')).round(0)
df['Var_From_Avg'] = df['Avg_Units_Ordered'] - df['Units_Ordered']
df['Var_From_Avg'] = df['Var_From_Avg'].abs().round(0)
df2 = df.query('Order_Create_Date == @today')
df2 = df2.query('Var_From_Avg >= @MinVar')
df2 = df2.query('Avg_Units_Ordered * @MinMul <= Units_Ordered')
РЕДАКТИРОВАТЬ: Вот визуальный пример некоторых строк.Я хочу, чтобы он выполнял среднее значение в зависимости от продукта и клиента, что он делает, но также исключая тот номер заказа из среднего значения, а это не так.Может быть, фильтр, где он смотрит только на предыдущие диапазоны дат (т.е. сегодня -1).Это будет работать.Как Having Order_Create_Date < today
.Я просто не знаю, как это написать.