scipy 如何从df中的多个列获得斜率?

hivapdat  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(117)

我使用下面的代码从一个 Dataframe 生成多个散点图。第一列是“时间”(所有图表的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']

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'])

但是,如何将其放大以获得每列的斜率?(A、B、C ...)

osh3o9ms

osh3o9ms1#

请考虑:

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

这将给出 Dataframe 中所有列的结果:

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

相关问题