Как найти медианное значение по группе в Pandas
Вы можете использовать следующий базовый синтаксис для вычисления медианного значения по группе в pandas:
df.groupby(['group_variable'])['value_variable']. median().reset_index()
Вы также можете использовать следующий синтаксис для вычисления медианного значения, сгруппированного по нескольким столбцам:
df.groupby(['group1', 'group2'])['value_variable']. median().reset_index()
В следующих примерах показано, как использовать этот синтаксис на практике.
Пример 1: найти медианное значение по одной группе
Предположим, у нас есть следующие Pandas DataFrames:
import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df team position points rebounds 0 A G 5 11 1 A G 7 8 2 A F 7 10 3 A F 9 6 4 B G 12 6 5 B G 9 5 6 B F 9 9 7 B F 4 12
Мы можем использовать следующий код, чтобы найти среднее значение столбца «баллы», сгруппированное по командам:
#calculate median points by team df.groupby(['team'])['points']. median().reset_index() team points 0 A 7.0 1 B 9.0
Из вывода мы видим:
- Среднее количество очков, набранных игроками команды А, равно 7 .
- Среднее количество очков, набранных игроками команды Б, равно 9 .
Обратите внимание, что мы также можем найти медианное значение двух переменных одновременно:
#calculate median points and median rebounds by team df.groupby(['team'])[['points', 'rebounds']]. median () team points rebounds 0 A 7.0 9.0 1 B 9.0 7.5
Пример 2: найти медианное значение по нескольким группам
В следующем коде показано, как найти медианное значение столбца «очки», сгруппированного по команде и позиции:
#calculate median points by team df.groupby(['team', 'position'])['points']. median().reset_index() team position points 0 A F 8.0 1 A G 6.0 2 B F 6.5 3 B G 10.5
Из вывода мы видим:
- Среднее количество очков, набранных игроками на позиции «F» в команде А, равно 8 .
- Среднее количество очков, набранных игроками в позиции «G» в команде А, равно 6 .
- Среднее количество очков, набранных игроками на позиции «F» в команде B, составляет 6,5 .
- Среднее количество очков, набранных игроками на позиции «G» в команде B, составляет 10,5 .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные функции в pandas:
Как рассчитать медиану в Pandas (с примерами)
Вы можете использовать функцию median() , чтобы найти медиану одного или нескольких столбцов в кадре данных pandas:
#find median value in specific column df['column1']. median () #find median value in several columns df[['column1', 'column2']]. median () #find median value in every numeric column df.median ()
В следующих примерах показано, как использовать эту функцию на практике со следующими пандами DataFrame:
#create DataFrame df = pd.DataFrame() #view DataFrame df player points assists rebounds 0 A 25 5 11 1 B NA 7 8 2 C 15 7 10 3 D 14 9 6 4 E 19 12 6 5 F 23 9 5 6 G 25 9 9 7 H 29 4 12
Пример 1: найти медиану одного столбца
В следующем коде показано, как найти медианное значение одного столбца в кадре данных pandas:
#find median value of *points* column df['points']. median () 23.0
Среднее значение в столбце очков равно 23 .
Обратите внимание, что по умолчанию функция median() игнорирует любые отсутствующие значения при вычислении медианы.
Пример 2: найти медиану нескольких столбцов
В следующем коде показано, как найти медианное значение нескольких столбцов в кадре данных pandas:
#find median value of *points* and *rebounds* columns df[['points', 'rebounds']]. median () points 23.0 rebounds 8.5 dtype: float64
Пример 3. Найдите медиану всех числовых столбцов
В следующем коде показано, как найти медианное значение всех числовых столбцов в кадре данных pandas:
#find median value of all numeric columns df.median () points 23.0 assists 8.0 rebounds 8.5 dtype: float64
Как рассчитать скользящую медиану в Pandas (с примерами)
Скользящая медиана — это медиана определенного количества предыдущих периодов временного ряда.
Чтобы вычислить скользящую медиану для столбца в кадре данных pandas, мы можем использовать следующий синтаксис:
#calculate rolling median of previous 3 periods df['column_name']. rolling (3). median ()
В следующем примере показано, как использовать эту функцию на практике.
Пример: вычислить скользящую медиану колонны
Предположим, у нас есть следующие Pandas DataFrame:
import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df month leads sales 0 1 13 22 1 2 15 24 2 3 16 23 3 4 15 27 4 5 17 26 5 6 20 26 6 7 22 27 7 8 24 30 8 9 25 33 9 10 26 32 10 11 23 27 11 12 24 25
Мы можем использовать следующий синтаксис для создания нового столбца, содержащего скользящую медиану «продаж» за предыдущие 3 периода:
#calculate 3-month rolling median df['sales_rolling3'] = df['sales']. rolling (3). median () #view updated data frame df month leads sales sales_rolling3 0 1 13 22 NaN 1 2 15 24 NaN 2 3 16 23 23.0 3 4 15 27 24.0 4 5 17 26 26.0 5 6 20 26 26.0 6 7 22 27 26.0 7 8 24 30 27.0 8 9 25 33 30.0 9 10 26 32 32.0 10 11 23 27 32.0 11 12 24 25 27.0
Мы можем вручную проверить, что скользящая медиана продаж, отображаемая для месяца 3, является медианой предыдущих 3 месяцев:
Точно так же мы можем проверить скользящую медиану продаж за 4-й месяц:
Мы можем использовать аналогичный синтаксис для вычисления скользящей 6-месячной медианы:
#calculate 6-month rolling median df['sales_rolling6'] = df['sales']. rolling (6). median () #view updated data frame df month leads sales sales_rolling3 sales_rolling6 0 1 13 22 NaN NaN 1 2 15 24 NaN NaN 2 3 16 23 23.0 NaN 3 4 15 27 24.0 NaN 4 5 17 26 26.0 NaN 5 6 20 26 26.0 25.0 6 7 22 27 26.0 26.0 7 8 24 30 27.0 26.5 8 9 25 33 30.0 27.0 9 10 26 32 32.0 28.5 10 11 23 27 32.0 28.5 11 12 24 25 27.0 28.5
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:
pandas.DataFrame.median#
Return the median of the values over the requested axis.
Parameters : axis
Axis for the function to be applied on. For Series this parameter is unused and defaults to 0.
For DataFrames, specifying axis=None will apply the aggregation across both axes.
New in version 2.0.0.
skipna bool, default True
Exclude NA/null values when computing the result.
numeric_only bool, default False
Include only float, int, boolean columns. Not implemented for Series.
**kwargs
Additional keyword arguments to be passed to the function.
Returns : Series or scalar
>>> s = pd.Series([1, 2, 3]) >>> s.median() 2.0
With a DataFrame
>>> df = pd.DataFrame('a': [1, 2], 'b': [2, 3]>, index=['tiger', 'zebra']) >>> df a b tiger 1 2 zebra 2 3 >>> df.median() a 1.5 b 2.5 dtype: float64
>>> df.median(axis=1) tiger 1.5 zebra 2.5 dtype: float64
In this case, numeric_only should be set to True to avoid getting an error.
>>> df = pd.DataFrame('a': [1, 2], 'b': ['T', 'Z']>, . index=['tiger', 'zebra']) >>> df.median(numeric_only=True) a 1.5 dtype: float64