我知道如何創建一個(可愛)熊貓相關表,由相關排名限於m列。熊貓相關表由n行
問題是,它會以交叉矩陣的形式輸出值的完整矩陣(對於所有列x所有列)的相關性。
但是如果我只想檢查一列,比如說df['m']
,那麼它在所有其他列上的相關性呢?
我是否需要創建兩個數據框並檢查它們之間的相關性?有更快的腳本嗎?
我知道如何創建一個(可愛)熊貓相關表,由相關排名限於m列。熊貓相關表由n行
問題是,它會以交叉矩陣的形式輸出值的完整矩陣(對於所有列x所有列)的相關性。
但是如果我只想檢查一列,比如說df['m']
,那麼它在所有其他列上的相關性呢?
我是否需要創建兩個數據框並檢查它們之間的相關性?有更快的腳本嗎?
IIUC,你可以只切片corr()
DataFrame
這樣的:
c = df.corr()['m'].abs()
so = c.sort_values(kind='quicksort')
print(so)
你可以簡單地通過df
列循環,並建立一個系列出來的相關性:
result = (pd.Series([df['m'].corr(df[col]) for col in df], index=df.columns)
.abs().sort_values())
如果您打算爲多列做到這一點,它可能更快地計算出整個相關矩陣和使用.loc
選擇感興趣的行:so.loc['m']
。
例如,
import numpy as np
import pandas as pd
np.random.seed(2016)
df = pd.DataFrame(np.random.random((4,4)), columns=list('klmn'))
result = (pd.Series([df['m'].corr(df[col]) for col in df], index=df.columns)
.abs().sort_values())
print(result)
# l 0.041438
# n 0.086255
# k 0.393375
# m 1.000000
# dtype: float64
c = df.corr().abs()
s = c.unstack()
so = s.sort_values() # s.order is deprecated. use s.sort_values
print(so.loc['m'])
# l 0.041438
# n 0.086255
# k 0.393375
# m 1.000000
# dtype: float64
注result
和so.loc['m']
是相同的。