Как рассчитать среднее значение столбцов в Pandas
Часто вам может быть интересно вычислить среднее значение одного или нескольких столбцов в кадре данных pandas. К счастью, вы можете легко сделать это в pandas, используя функцию mean() .
В этом руководстве показано несколько примеров использования этой функции.
Пример 1. Найдите среднее значение одного столбца
Предположим, у нас есть следующие Pandas DataFrame:
import pandas as pd import numpy as np #create DataFrame df = pd.DataFrame() #view DataFrame df player points assists rebounds 0 A 25 5 NaN 1 B 20 7 8.0 2 C 14 7 10.0 3 D 16 8 6.0 4 E 27 5 6.0 5 F 20 7 9.0 6 G 12 6 6.0 7 H 15 9 10.0 8 I 14 9 10.0 9 J 19 5 7.0
Мы можем найти среднее значение столбца под названием «точки», используя следующий синтаксис:
df['points'].mean() 18.2
Функция mean() также будет исключать NA по умолчанию. Например, если мы найдем среднее значение столбца «отскоки», первое значение «NaN» будет просто исключено из расчета:
df['rebounds'].mean() 8.0
Если вы попытаетесь найти среднее значение столбца, который не является числовым, вы получите сообщение об ошибке:
df['player'].mean() TypeError: Could not convert ABCDEFGHIJ to numeric
Пример 2. Найдите среднее значение нескольких столбцов
Мы можем найти среднее значение нескольких столбцов, используя следующий синтаксис:
#find mean of points and rebounds columns df[['rebounds', 'points']].mean() rebounds 8.0 points 18.2 dtype: float64
Пример 3. Найдите среднее значение всех столбцов
Мы можем также найти среднее значение всех числовых столбцов, используя следующий синтаксис:
#find mean of all numeric columns in DataFrame df.mean () points 18.2 assists 6.8 rebounds 8.0 dtype: float64
Обратите внимание, что функция mean() просто пропустит столбцы, которые не являются числовыми.
Python Pandas, как вычислить среднее с подсчетом повторов одновременно?
Пытаюсь группировать данные с вычислением среднего, но теряю столбец. Как его сохранить?
И как добавить столбец с числом подсчета вхождений?
import pandas as pd df = pd.DataFrame([['zet', 'z', '40%'],['Iks', 'x', '10%'],['Igrek', 'y', '5%'],['Iks', 'x', '20%']] , columns=['Name', 'Symbol', 'Value']) print(df) df = df.replace('%','',regex=True) df['Value'] = pd.to_numeric(df['Value']) df1 = df.groupby(['Symbol']).mean().sort_values(by=['Value'], ascending=False) print(df1)
- Вопрос задан более трёх лет назад
- 445 просмотров
Комментировать
Решения вопроса 1
Так ведь в этой программе новый столбец в датафрейме не создаётся. Чтобы создать нужно ему дать имя:
df[‘newcol’]=. какие-то действия.
Далее, среднее от чего ? Если от Value то оно будет 75/4=18,75 т.е. это будет прописано в каждой строке в новом столбце ?
Тогда просто
df['mean1']=df['Value'].mean() # значение mean пропишется в каждой строке столбца
UPD колонка пропадает потому что pandas вероятно берёт в результат только указанную колонку Symbol и ко всем остальным цифровым применяет агрегатную функцию , в данном случаем mean(). Оставлять другие текстовые колонки в результирующем наборе было бы бессмысленно т.к. часть строк из них при группировке по Symbol просто пропадёт.
Относительно добавления сразу двух столбцов — можно посмотреть «pandas add multiple columns». Можно например так
df['a'], df['b']=list1,list2 #оба списка по длине равны длине колонки
но с учётом того, что в этой же строке нужно посчитать count() и прописать соответствующее значение в строки с каждым соответствующим значением Value получится довольно громоздкая конструкция.
df.groupby(['Name']).size() Out[95]: Name Igrek 1 Iks 2 zet 1 dtype: int64
Затем создать соответствие элемент/число вхождений, и по этому соответствию прописать цифры в новом столбце по каждой строке
df.groupby(['Name']).size().index.tolist() df.groupby(['Name']).size().tolist() d=dict( zip (df.groupby(['Name']).size().index.tolist(), df.groupby(['Name']).size().tolist() ) ) d Out[98]:
Как рассчитать среднее значение выбранных столбцов в Pandas
Вы можете использовать следующие методы для вычисления средних значений строк для выбранных столбцов в кадре данных pandas:
Метод 1: вычислить среднее значение строки для всех столбцов
df.mean (axis= 1 )
Метод 2: вычислить среднее значение строки для определенных столбцов
df[['col1', 'col3']]. mean (axis= 1 )
В следующих примерах показано, как использовать каждый метод на практике со следующими пандами DataFrame:
import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df points assists rebounds 0 14 5 11 1 19 7 8 2 9 7 10 3 21 9 6 4 25 12 6 5 29 9 5 6 20 9 9 7 11 4 12
Метод 1: вычислить среднее значение строки для всех столбцов
Следующий код показывает, как создать новый столбец в DataFrame, который отображает среднее значение строки для всех столбцов:
#define new column that shows the average row value for all columns df['average_all'] = df.mean (axis= 1 ) #view updated DataFrame df points assists rebounds average_all 0 14 5 11 10.000000 1 19 7 8 11.333333 2 9 7 10 8.666667 3 21 9 6 12.000000 4 25 12 6 14.333333 5 29 9 5 14.333333 6 20 9 9 12.666667 7 11 4 12 9.000000
Вот как интерпретировать вывод:
Среднее значение первой строки рассчитывается как: (14+5+11) / 3 = 10 .
Среднее значение второй строки рассчитывается как: (19+7+8) / 3 = 11,33 .
Метод 2: вычислить среднее значение строки для определенных столбцов
В следующем коде показано, как рассчитать среднее значение строки только для столбцов «очки» и «подборы»:
#define new column that shows average of row values for points and rebounds columns df['avg_points_rebounds'] = df[['points', 'rebounds']]. mean (axis= 1 ) #view updated DataFrame df points assists rebounds avg_points_rebounds 0 14 5 11 12.5 1 19 7 8 13.5 2 9 7 10 9.5 3 21 9 6 13.5 4 25 12 6 15.5 5 29 9 5 17.0 6 20 9 9 14.5 7 11 4 12 11.5
Вот как интерпретировать вывод:
Среднее значение «очков» и «подборов» в первой строке рассчитывается как: (14+11) / 2 = 12,5 .
Среднее значение «очков» и «подборов» во второй строке рассчитывается как: (19+8) / 2 = 13,5 .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в Python:
Среднее значение mean() в DataFrame Pandas
В этом примере мы рассчитаем среднее значение по столбцам. Мы узнаем средние оценки, полученные студентами по предметам.
import pandas as pd mydictionary = # create dataframe df_marks = pd.DataFrame(mydictionary) print('DataFrame\n----------') print(df_marks) # calculate mean mean = df_marks.mean() print('\nMean\n------') print(mean)
DataFrame ---------- names physics chemistry algebra 0 Somu 68 84 78 1 Kiku 74 56 88 2 Amol 77 73 82 3 Lini 78 69 87 Mean ------ physics 74.25 chemistry 70.50 algebra 83.75 dtype: float64
Функция mean() возвращает Pandas, это поведение функции mean() по умолчанию. Следовательно, в этом конкретном случае вам не нужно передавать какие-либо аргументы функции mean(). Или, если вы хотите явно указать функцию для вычисления по столбцам, передайте axis = 0, как показано ниже.
df_marks.mean(axis=0)
Пример 2
В этом примере мы создадим DataFrame с числами, присутствующими во всех столбцах, и вычислим среднее значение.
Из предыдущего примера мы видели, что функция mean() по умолчанию возвращает среднее значение, вычисленное среди столбцов.
import pandas as pd mydictionary = # create dataframe df_marks = pd.DataFrame(mydictionary) print('DataFrame\n----------') print(df_marks) # calculate mean of the whole DataFrame mean = df_marks.mean().mean() print('\nMean\n------') print(mean)
DataFrame ---------- names physics chemistry algebra 0 Somu 68 84 78 1 Kiku 74 56 88 2 Amol 77 73 82 3 Lini 78 69 87 Mean ------ 76.16666666666667
Пример 3: по строкам
В этом примере мы вычислим среднее значение всех столбцов по строкам или оси = 1. В этом конкретном примере среднее значение по строкам дает среднее значение или процент оценок, полученных каждым учеником.
import pandas as pd mydictionary = # create dataframe df_marks = pd.DataFrame(mydictionary) print('DataFrame\n----------') print(df_marks) # calculate mean along rows mean = df_marks.mean(axis=1) print('\nMean\n------') print(mean) # display names and average marks print('\nAverage marks or percentage for each student') print(pd.concat([df_marks['names'], mean], axis=1))
DataFrame ---------- names physics chemistry algebra 0 Somu 68 84 78 1 Kiku 74 56 88 2 Amol 77 73 82 3 Lini 78 69 87 Mean ------ 0 76.666667 1 72.666667 2 77.333333 3 78.000000 dtype: float64 Average marks or percentage for each student names 0 0 Somu 76.666667 1 Kiku 72.666667 2 Amol 77.333333 3 Lini 78.000000
В этом руководстве по Pandas мы узнали, как рассчитать среднее значение всего DataFrame, по столбцу (столбцам) и строкам.