Возникли проблемы с исключением средних значений на фрейме данных

1

У меня есть 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. Я просто не знаю, как это сделать.

Изображение 174551

  • 0
    Можете ли вы привести пример df и вывести df?
Теги:
pandas
dataframe
python-3.x
average

1 ответ

1

Как насчет подмножества блока данных перед выполнением средней операции?

Что-то вроде

df[df.Order_Create_Date < Today] а затем выполнить вычисление среднего и группового значений?

  • 0
    Как бы я тогда запустил свой калькулятор средних значений?
  • 0
    После того, как вы установите подмножество набора данных, у вас есть только записи, у которых Order_Create_Date имеет значения меньше текущей даты. Таким образом, вы можете просто усреднить тогда.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню