#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]
})
)
Это вернет среднее значение «еженедельных продаж», а также минимальное и максимальное значение «ежемесячных продаж». Ознакомьтесь с некоторыми примерами из [