Вы можете использовать следующий базовый синтаксис для вычисления корреляции между двумя переменными по группам в 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