有人知道如何在每次迭代中迭代具有两列的pandas Dataframe吗?
说我有
a b c d
5.1 3.5 1.4 0.2
4.9 3.0 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
5.0 3.6 1.4 0.2
5.4 3.9 1.7 0.4
类似
for x, y in ...:
correlation of x and y
所以输出将是
corr_ab corr_bc corr_cd
0.1 0.3 -0.4
答案 0 :(得分:2)
您可以将zip
用于元组的索引,使用Series.corr
和f-string
作为列名创建一个元素列表的字典,然后传递给DataFrame
构造函数:>
L = {f'corr_{col1}{col2}': [df[col1].corr(df[col2])]
for col1, col2 in zip(df.columns, df.columns[1:])}
df = pd.DataFrame(L)
print (df)
corr_ab corr_bc corr_cd
0 0.860108 0.61333 0.888523
答案 1 :(得分:0)
您可以使用df.corr
获取数据框的相关性。然后,您使用mask
避免重复相关。之后,您可以堆叠新的数据框以使其更具可读性。假设您有这样的数据
0 1 2 3 4
0 11 6 17 2 3
1 3 12 16 17 5
2 13 2 11 10 0
3 8 12 13 18 3
4 4 3 1 0 18
找到相关性,
corrData = data.corr(method='pearson')
我们得到
0 1 2 3 4
0 1.000000 -0.446023 0.304108 -0.136610 -0.674082
1 -0.446023 1.000000 0.563112 0.773013 -0.258801
2 0.304108 0.563112 1.000000 0.494512 -0.823883
3 -0.136610 0.773013 0.494512 1.000000 -0.545530
4 -0.674082 -0.258801 -0.823883 -0.545530 1.000000
提出重复的相关性,
dataCorr = dataCorr.mask(np.tril(np.ones(dataCorr.shape)).astype(np.bool))
我们得到
0 1 2 3 4
0 NaN -0.446023 0.304108 -0.136610 -0.674082
1 NaN NaN 0.563112 0.773013 -0.258801
2 NaN NaN NaN 0.494512 -0.823883
3 NaN NaN NaN NaN -0.545530
4 NaN NaN NaN NaN NaN
堆叠相关数据
dataCorr = dataCorr.stack().reset_index()
堆积的数据将如图所示
level_0 level_1 0
0 0 1 -0.446023
1 0 2 0.304108
2 0 3 -0.136610
3 0 4 -0.674082
4 1 2 0.563112
5 1 3 0.773013
6 1 4 -0.258801
7 2 3 0.494512
8 2 4 -0.823883
9 3 4 -0.545530