在大熊猫数据框中对代码进行矢量化处理,其中每一行都应视为一个numpy数组

时间:2018-12-29 21:24:33

标签: python pandas dataframe vectorization

我有一个大熊猫数据框,它的结构基本上如下:

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)。我不知道如何向量化代码。我的原始数据帧非常大,因此,我将对如何加快代码速度的任何建议深表感谢。

谢谢!

2 个答案:

答案 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

例如,检查01行,您会看到结果是相同的:

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.        ]])