我试图使相关系数的多索引表(矩阵)和假定值。我更喜欢用scipy.stats
测试。
x = pd.DataFrame(
list(
zip(
[1,2,3,4,5,6], [5, 7, 8, 4, 2, 8], [13, 16, 12, 11, 9, 10]
)
),
columns= ['a', 'b', 'c']
)
# I've tried something like this
for i in range(len(x.columns)):
r,p = pearsonr(x[x.columns[i]], x[x.columns[i+1]])
print(f'{r}, {p}')
显然for loop
不会工作。最后我想写的是:
<表类>b c tbody><<tr>r 1.0 .09点 。8 p 高楼"> .87点 0。06 br .09点 1 。 p .87点 高楼"> .41点 cr 。8 。 1 p 0。06 .41点 00 表类>
下面是使用scipy person和Pandas corr方法的一种方法:
import pandas as pd
from scipy.stats import pearsonr
def pearsonr_pval(x, y):
return pearsonr(x, y)[1]
df = (
pd.concat(
[
x.corr(method="pearson").reset_index().assign(value="r"),
x.corr(method=pearsonr_pval).reset_index().assign(value="p"),
]
)
.groupby(["index", "value"])
.agg(lambda x: list(x)[0])
).sort_index(ascending=[True, False])
df.index.names = ["", ""]
:
print(df)
# Output
a b c
a r 1.000000 -0.088273 -0.796421
p 1.000000 0.867934 0.057948
b r -0.088273 1.000000 0.421184
p 0.867934 1.000000 0.405583
c r -0.796421 0.421184 1.000000
p 0.057948 0.405583 1.000000