У меня есть dataframe, успешно выполняющий эквивалент выражения averageifs в excel, но я не знаю, как добавить этот синтаксис "exclude". Я хочу, чтобы среднее значение всех 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')
EDIT: Вот визуальный пример некоторых строк. Я хочу, чтобы он работал в среднем на основе продукта и клиента, что он и делает, но также исключая этот номер заказа из среднего, чего нет. Может быть, фильтр, где он смотрит только на предыдущие диапазоны дат (например, сегодня -1). Это сработает. Как Having Order_Create_Date < today
. Я просто не знаю, как это сделать.
Как насчет подмножества блока данных перед выполнением средней операции?
Что-то вроде
df[df.Order_Create_Date < Today]
а затем выполнить вычисление среднего и группового значений?
Order_Create_Date
имеет значения меньше текущей даты. Таким образом, вы можете просто усреднить тогда.