我有一个大熊猫数据框,它的结构基本上如下:
df = pd.DataFrame(np.random.randint(0,100,size=(20, 20)), columns=list('ABCDEFGHIJKLMNOPQRST'))
每个“行”都是一个数字数组。例如:
row_one = df.iloc[0, :].values
row_two = df.iloc[1, :].values
....
我想计算所有行组合(例如e)之间的相关系数(np.corrcoef)。 g。:
np.corrcoef(row_one, row_one)[0][1]
np.corrcoef(row_one, row_two)[0][1]
np.corrcoef(row_one, row_three)[0][1]
....
np.corrcoef(row_two, row_one)[0][1]
np.corrcoef(row_one, row_two)[0][1]
np.corrcoef(row_one, row_three)[0][1]
...
我想最后获得一个DataFrame,它将保存所有组合的所有相关系数(CC)。我不知道如何向量化代码。我的原始数据帧非常大,因此,我将对如何加快代码速度的任何建议深表感谢。
谢谢!
答案 0 :(得分:0)
Pandas已经拥有一种方法:corr
。它适用于列,因此您只需要转置数据框即可。
corr_matrix = df.T.corr()
它将生成一个相关矩阵,您可以在其中找到数据集之间的相关系数。因此,第四和第七数据集的系数为corr_matrix.iloc[3, 6]
(或对称的corr_matrix.iloc[6, 3]
)。
答案 1 :(得分:0)
最简单的方法是使用熊猫的内置方法.corr()
。但是请注意,默认情况下会按列进行计算:
计算列的成对相关性,不包括NA /空值
所以您可以这样做:
df.T.corr()
您可以执行以下操作检查任何对关联:
row_one = df.iloc[0, :].values
row_two = df.iloc[1, :].values
np.corrcoef(row_one,row_two)
作为一个简单的例子:
df = pd.DataFrame(np.random.randint(0,10,size=(3, 3)), columns=list('ABC'))
0 1 2
0 1.000000 -0.479317 -0.921551
1 -0.479317 1.000000 0.782467
2 -0.921551 0.782467 1.000000
例如,检查0
和1
行,您会看到结果是相同的:
row_one = df.iloc[0, :].values
row_two = df.iloc[1, :].values
np.corrcoef(row_one,row_two)
array([[ 1. , -0.47931716],
[-0.47931716, 1. ]])