Коротко
sum,mean,median,min,max,std,count,quantileсчитаются по каждому столбцу (axis=0);axis=1— по каждой строке.- Пропуски по умолчанию пропускаются (
skipna=True), в отличие от NumPy. idxmax()/idxmin()— метка строки с максимумом / минимумом (в NumPyargmaxдаёт позицию).agg(["min", "max"])— несколько статистик сразу.stdиvarв pandas по умолчанию выборочные (ddof=1), в NumPy —ddof=0.- Текстовые столбцы в
meanи подобных вызывают ошибку — выберите числовые или передайтеnumeric_only=True.
a.sum(axis=0) — вниз по строкам534627134452↓↓↓↓11141011
(3, 4) → (4,)a.sum(axis=1) — вдоль строки5346→182713→134452→15
(3, 4) → (3,)Синтаксис
df.sum(axis=0, skipna=True, numeric_only=False) # так же mean, median, min, max, std
df.quantile(q=0.5)
df.idxmax(axis=0), df.idxmin(axis=0)
df.cumsum(axis=0)
df.agg(["min", "max", "mean"])Параметры
ПараметрЧто делаетПо умолчанию
axis0 — по столбцам (результат для каждого столбца), 1 — по строкам0skipnaпропускать NaNTruenumeric_onlyтолько числовые столбцыFalseddofв std и var: знаменатель n − ddof1qв quantile: уровень или список уровней от 0 до 10.5Примеры
# продажи по месяцам: 3 магазина
sales = pd.DataFrame(
{"jan": [120, 95, 140], "feb": [130, None, 150], "mar": [110, 105, 160]},
index=["Омск", "Тула", "Сочи"],
)sales.mean() # по каждому столбцу (axis=0); NaN пропускаетсяВывод
jan 118.333333 feb 140.000000 mar 125.000000 dtype: float64
sales.sum(axis=1) # по каждой строкеВывод
Омск 360.0 Тула 200.0 Сочи 450.0 dtype: float64
print(sales["feb"].mean())
sales["feb"].mean(skipna=False) # с пропуском результат — NaNВывод
140.0 np.float64(nan)
sales.agg(["min", "max", "median"])Вывод
jan feb mar min 95.0 130.0 105.0 max 140.0 150.0 160.0 median 120.0 140.0 110.0
print(sales.idxmax()) # магазин с максимумом в каждом месяце
sales.idxmax(axis=1) # лучший месяц каждого магазинаВывод
jan Сочи feb Сочи mar Сочи dtype: str Омск feb Тула mar Сочи mar dtype: str
sales["jan"].quantile([0.25, 0.5, 0.75])Вывод
0.25 107.5 0.50 120.0 0.75 130.0 Name: jan, dtype: float64
sales.cumsum(axis=1) # нарастающий итог по месяцамВывод
jan feb mar Омск 120.0 250.0 360.0 Тула 95.0 NaN 200.0 Сочи 140.0 290.0 450.0
Подводные камни
std в pandas и NumPy
print(sales["jan"].std()) # ddof=1 — выборочное
np.std(sales["jan"].to_numpy()) # NumPy: ddof=0Вывод
22.546248764114473 np.float64(18.408935028645434)
Текстовые столбцы
Нечисловые столбцы не отбрасываются молча.
shops = sales.assign(manager=["Аня", "Борис", "Вика"])
shops.mean()Ошибка
TypeError: Cannot perform reduction 'mean' with string dtype
shops = sales.assign(manager=["Аня", "Борис", "Вика"])
shops.mean(numeric_only=True) # без numeric_only падает на текстеВывод
jan 118.333333 feb 140.000000 mar 125.000000 dtype: float64