Не удается вызвать функцию с помощью метода .agg в панд?

#python #pandas #aggregation

Вопрос:

Я пытаюсь закончить курс Pandas с использованием Python в DataCamp и столкнулся с проблемами. У меня есть решения, но я просто хочу спросить. Тест прост: использование функций numpy для группы данных

Это их рекомендуемые советы по завершению этой небольшой викторины:

 .agg() can take in a list of functions. The functions shouldn't be called, so don't use parentheses with them.
 

Это был мой код, чтобы найти минимальное, максимальное, среднее значение weekly_sales каждого магазина type

 sales_stats = sales.groupby("type")["weekly_sales"].agg([np.min(), np.max(), np.mean(), np.median()])
 

и в этом заключается ошибка:

 File "<stdin>", line 4, in mean
TypeError: _mean_dispatcher() missing 1 required positional argument: 'a'
 

поэтому я изменил его на:

 sales_stats = sales.groupby("type")["weekly_sales"].agg([np.mean(sales["weekly_sales"]),np.median,np.min,np.max])
 

но возникают другие ошибки, поэтому я смотрю на решения:

 sales_stats = sales.groupby("type")["weekly_sales"].agg([np.min, np.max, np.mean, np.median])
 

Означает ли это, что нам не нужно передавать какие-либо аргументы этим методам numpy? и функции .agg передадут «weekly_sales» в качестве аргумента каждому из них? Если да, то если я хочу передать два аргумента этим методам, например monthly_sales , правильно ли это?

 sales_stats = sales.groupby("type")["weekly_sales","monthly_sales"].agg([np.min, np.max, np.mean, np.median])
 

Ответ №1:

Вы очень близки, но правильный синтаксис был бы:

 sales_stats = (
    sales.groupby("type")[["weekly_sales","monthly_sales"]]
    .agg([np.min, np.max, np.mean, np.median])
)
 

Это связано с тем, что для выбора нескольких столбцов из DataFrame объекта или, в данном случае Groupby , объекта требуется список имен столбцов. Этот фрагмент кода вернет минимальное, максимальное, среднее и медианное значение столбцов «weekly_sales» и «monthly_sales» — сгруппируйте по «типу».

Означает ли это, что нам не нужно передавать какие-либо аргументы этим методам numpy? и функции .agg передадут «weekly_sales» в качестве аргумента каждому из них? Если да, то если я хочу передать два аргумента этим методам, например monthly_sales, правильно ли это?

Аргументы (в данном случае каждый поддиапазон) передаются пандами под колпаком агрегирующим функциям.

Если вам нужен более детальный контроль, вы можете передать словарь следующим образом:

 sales_stats = (
    sales.groupby("type")
    .agg({
        "weekly_sales": np.mean, 
        "monthly_sales": [np.min, np.max]
    })
)
 

Это вернет среднее значение «еженедельных продаж», а также минимальное и максимальное значение «ежемесячных продаж». Ознакомьтесь с некоторыми примерами из [