【问题标题】:How can I get slopes from multiple columns in a df?如何从 df 中的多列获取斜率?
【发布时间】:2022-11-17 02:50:39
【问题描述】:

我正在使用下面的代码从单个数据帧生成多个散点图。第一列是“时间”(所有图表的 x 轴),另一列是 A、B、C...(每个图表的 y 轴)。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel("output.xlsx")
columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
       'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T']
list(enumerate(columns))

for i in enumerate(columns): 
  plt.subplot(20,4, i[0]+1)
  x = 'Time'
  y = i[1]
  plt.scatter(x,y, data=df)
plt.show()

我能够生成所有图表,但我也希望每个图表都有斜率。我是这样的事情:

from scipy import stats 
slope, intercept, r_value, p_value, std_err = stats.linregress(df['Time'], df['A'])  

但是我怎样才能把它放大到每列都有斜率呢? (甲、乙、丙……)

【问题讨论】:

    标签: python scipy linear-regression


    【解决方案1】:

    考虑:

    from scipy import stats
    import numpy as np
    import pandas as pd
    
    np.random.seed(42)
    columns = list('ABCDEFGHIJKLMNOPQRST')
    df = pd.DataFrame(np.random.rand(10, 21), columns = ['Time']+columns)
    lm = []
    for c in columns:
        res =[c]+ list(stats.linregress(df['Time'], df[c]))
        lm.append(res)
    df_lm = pd.DataFrame(lm, columns = ['Category', 'slope', 'intercept', 'r_value', 'p_value', 'std_err'] )
    df_lm
    

    这给出了数据框中所有列的结果:

       Category     slope  intercept   r_value   p_value   std_err
    0         A  0.094608   0.447455  0.066041  0.856163  0.505383
    1         B -0.566963   0.698525 -0.464790  0.175910  0.381859
    2         C  0.320227   0.407785  0.246870  0.491698  0.444417
    3         D -0.171888   0.534895 -0.139052  0.701638  0.432797
    4         E -0.238098   0.337545 -0.387208  0.268959  0.200444
    5         F -0.467824   0.542608 -0.369604  0.293181  0.415820
    

    【讨论】:

      猜你喜欢
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 2021-12-05
      • 1970-01-01
      • 2022-01-17
      • 2020-12-06
      相关资源
      最近更新 更多