Как рассчитать корреляцию по группе в Pandas


Вы можете использовать следующий базовый синтаксис для вычисления корреляции между двумя переменными по группам в pandas:

df.groupby('group_var')[['values1',' values2']]. corr().unstack().iloc [:, 1 ]

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: вычислить корреляцию по группе в Pandas

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
 'points': [18, 22, 19, 14, 14, 11, 20, 28],
 'assists': [2, 7, 9, 3, 12, 10, 14, 21]})

#view DataFrame
print(df)

Мы можем использовать следующий код для расчета корреляции между очками и передачами , сгруппированными по командам :

#calculate correlation between points and assists, grouped by team
df.groupby('team')[['points',' assists']]. corr().unstack().iloc [:, 1 ]

team
A 0.603053
B 0.981798
Name: (points, assists), dtype: float64

Из вывода мы видим:

  • Коэффициент корреляции между очками и передачами для команды А равен 0,603053 .
  • Коэффициент корреляции между очками и передачами для команды Б равен 0,981798 .

Поскольку оба коэффициента корреляции положительны, это говорит нам о том, что связь между очками и передачами для обеих команд положительна.

То есть игроки, которые стремятся набрать больше очков, также склонны делать больше передач.

По теме: Что считается «сильной» корреляцией?

Обратите внимание, что мы могли бы сократить синтаксис, не используя функции unstack и iloc , но результаты будут более уродливыми:

df.groupby('team')[['points',' assists']]. corr ()

 points assists
team 
A points 1.000000 0.603053
 assists 0.603053 1.000000
B points 1.000000 0.981798
 assists 0.981798 1.000000

Этот синтаксис создает корреляционную матрицу для обеих команд, что дает нам избыточную информацию.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Как выполнить GroupBy Sum в Pandas
Как использовать Groupby и Plot в Pandas
Как подсчитать уникальные значения с помощью GroupBy в Pandas