Предположим, у меня есть датафрейм pandas с несколькими столбцами, например:
import pandas as pd
iterables = [['a', 'b'], ['1', '2']]
my_index = pd.MultiIndex.from_product(iterables, names=['first', 'second'])
df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns=my_index)
Тогда df
производит
first a b
second 1 2 1 2
0 1 2 3 4
1 5 6 7 8
Теперь, если я хочу самокорреляции df['a']
с самим собой, это просто: df['a'].corr()
поймет меня. Обратите внимание, что такая корреляция имеет форму (2, 2)
.
Я хотел бы рассчитать матрицу корреляции df['a']
с df['b']
. Предположительно, код df['a'].corrwith(df['b'])
должен дать мне это. Этот код выполняется, но результат имеет форму (2,)
, которая мне не подходит. Почему матрица самокорреляции, заданная .corr()
, должна давать результат, отличный от корреляции, заданной .corrwith()
? Мне нужна корреляционная матрица той же формы, что и df['a'].corr()
, потому что я хочу построить тепловые карты Seaborn и мне нужна двумерная корреляционная матрица.
Спасибо заранее за ваше время!
2 ответа
Ключом к этой проблеме было признание того, что результатом функции .corr()
DataFrame является сам DataFrame pandas. Если мы запустим код в вопросе, а затем используем функцию .loc
, мы сможем получить подмножество матрицы корреляции. Результат df.corr()
first a b
second 1 2 1 2
first second
a 1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
b 1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
И результат df.corr().loc['a', 'b']
равен
second 1 2
second
1 1.0 1.0
2 1.0 1.0
Это то, что я хотел.
Вы хотите использовать функцию corr () из DataFRame, а не из Series.
Это выглядело бы так:
In [1]:
# Create the Dataframe
import pandas as pd
iterables = [['a', 'b'], ['1', '2']]
my_index = pd.MultiIndex.from_product(iterables, names=['first', 'second'])
df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns=my_index)
df
Out [1]:
first a b
second 1 2 1 2
0 1 2 3 4
1 5 6 7 8
In [2]:
## Get the correlation matrix
df.corr()
Out [2]:
first a b
second 1 2 1 2
first second
a 1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
b 1 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0
РЕДАКТИРОВАТЬ
* Вы можете выбрать функцию, стоящую за этим методом: {‘Pearson ',‘ Kendall', ‘Spearman '} или вызываемый
Пирсон: стандартный коэффициент корреляции
Кендалл: коэффициент корреляции Кендалла Тау Спирман: ранг корреляции Спирмена
Вызываемый: вызываемый с вводом двух 1d ndarrays *
Похожие вопросы
Связанные вопросы
Новые вопросы
python-3.x
НЕ ИСПОЛЬЗУЙТЕ, ЕСЛИ ВАШ ВОПРОС ТОЛЬКО ДЛЯ PYTHON 3. Всегда используйте вместе со стандартным тегом [python].