【问题标题】:Linear Regression on each column without creating for loops or functions每列的线性回归,无需创建 for 循环或函数
【发布时间】:2019-09-07 05:05:15
【问题描述】:

对 pandas 数据框中的每一列或每一行应用回归,而不使用 for 循环。

关于这个有一个类似的帖子; Apply formula across pandas rows/ regression line,对每个“行”进行回归,但是绘制给出的答案是错误的。我无法对此发表评论,因为我没有足够的声誉,主要问题是,它采用列的值,然后在每一行上使用 apply 函数。

目前我只知道如何做每一列例如。

np.random.seed(1997)

df = pd.DataFrame(np.random.randn(10, 4))
first_stats = scipy.stats.linregress(df.index,df[0])
second_stats = scipy.stats.linregress(df.index,df[1])

我希望在不创建函数或 for 循环的情况下找到答案,类似于; pandas df.sum(),但不是 sum,我想做一个回归,导致斜率、截距、r 值、p 值和标准误差。

【问题讨论】:

    标签: python pandas scipy regression


    【解决方案1】:

    看下面的例子:

    import numpy as np
    import pandas as pd
    from scipy.stats import linregress
    
    np.random.seed(1997)
    df = pd.DataFrame(pd.np.random.rand(100, 10))
    
    df.apply(lambda x: linregress(df.index, x), result_type='expand').rename(index={0: 'slope', 1: 
                                                                                      'intercept', 2: 'rvalue', 3:
                                                                                      'p-value', 4:'stderr'})
    

    它应该返回你想要的。

    【讨论】:

    • 应该把函数改成; lambda vals: linregress(df.index, vals)。除了它做它做的事情。
    猜你喜欢
    • 2019-01-02
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2016-03-22
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多