首页 > 解决方案 > r 基于来自 2 个数据帧的列的平方

问题描述

我有2个数据框df1和df2,df1显示在下面的代码中,df2是每组中每一列的填充平均值,也如下面的代码所示

import pandas as pd
import numpy as np
data = {'Group':['1', '1', '2', '2'],
        'A':[1, 5, 15, 170],
        'B':[7, 12, 100.1, 14],
        'C':[2, 3.1, 6, 1],
        }
df1 = pd.DataFrame(data)
df2 = df1.groupby("Group").transform(lambda x: x.mean())

我想通过 2 个数据帧计算 R 平方循环的值并计算每对列的 r 平方 df1['A'] & df2['A'] , df1['B'] & df2['B '], .... 预期结果是一个数据框,其中填充了 A&A 、 B&B 列的 Rsquared .... 谢谢!

标签: pythonpandasdataframescikit-learn

解决方案


一种选择是用于intersection获取共享列并scipy.stats.linregress获取rvalue然后平方它:

# Columns Shared By Both DataFrames
cols = df1.columns.intersection(df2.columns)
# Iterate, Calculate, and Collect R-Squared Values
r_squared = {c: scipy.stats.linregress(x=df1[c], y=df2[c]).rvalue ** 2
             for c in cols}

r_squared

{'A': 0.39989765735182164, 'B': 0.37808726682588906, 'C': 0.06442976976619669}

完整的工作示例:

import pandas as pd
import scipy.stats

data = {'Group': ['1', '1', '2', '2'],
        'A': [1, 5, 15, 170],
        'B': [7, 12, 100.1, 14],
        'C': [2, 3.1, 6, 1],
        }
df1 = pd.DataFrame(data)
df2 = df1.groupby("Group").transform('mean')

# Columns Shared By Both DataFrames
cols = df1.columns.intersection(df2.columns)
# Iterate, Calculate, and Collect R-Squared Values
r_squared = {c: scipy.stats.linregress(x=df1[c], y=df2[c]).rvalue ** 2
             for c in cols}

print(r_squared)

推荐阅读