我有一个如下所示的数据框,
df1 =
Index bins one two three four
a 1 0.760207 0.313230 1.257121 3.777180
b 2 0.920607 0.350345 -0.424963 0.032379
c 3 -0.975032 0.580298 1.819454 -0.807784
d 4 -0.886256 0.656349 0.306178 1.172622
e 5 0.512182 0.362790 1.066892 0.250835
我想获得一个数据框,该数据框仅给出具有列仓的列1、2、3、4的r平方值。这样我想要的数据框如下所示。
df2 =
columns r-square_with_bins
one 0.25
two 0.7
three 0.35
four 0.01
five 0.112
我在这里写的r平方值并不精确,仅用于理解数据帧结构。在实际数据集中,有200多个列,其中第一列为“箱”。但是问题和这个相同。
需要帮助。
您可以使用scipy.stats.linregress()
找到scipy.stats.linregress()
,然后将其平方成R²。
首先导入模块:
rvalue
然后,例如,用import scipy.stats
为列'bins'
计算R²:
'one'
对我来说是0.15589578141321594。
为了对所有列(第一列的scipy.stats.linregress(df1[['bins', 'one']].to_numpy()).rvalue ** 2
除外)执行此操作,只需在'bins'
循环中执行每个计算(例如,使用列表推导。)
这将像您描述的那样创建一个新的DataFrame for
:
df2
将产生以下DataFrame:
df2 = pd.DataFrame({
'columns': df1.columns[1:],
'r-square_with_bins': [
scipy.stats.linregress(df1[['bins', col]].to_numpy()).rvalue ** 2
for col in df1.columns[1:]
]
})