You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从DataFrame多列中获取各列与Time列的拟合斜率?

问题

我使用以下代码从单个DataFrame生成多个散点图,其中第一列Time为所有图表的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…每一列的斜率?

解决方案

直接在遍历列的循环中加入线性回归计算即可,同时可以把斜率存储起来,还能把斜率标注在对应散点图上,方便对应查看:

完整代码示例

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats 

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

# 用字典存储列名与对应斜率的映射
slope_dict = {}

# 调整画布大小,优化子图布局(20列分成5行4列更合理)
plt.figure(figsize=(16, 25))
for idx, col in enumerate(columns): 
    plt.subplot(5, 4, idx+1)
    # 绘制散点图
    plt.scatter(df['Time'], df[col])
    # 计算当前列的线性回归参数
    slope, intercept, r_value, p_value, std_err = stats.linregress(df['Time'], df[col])
    # 存储斜率
    slope_dict[col] = slope
    # 绘制拟合直线(可选,让趋势更直观)
    plt.plot(df['Time'], intercept + slope * df['Time'], color='red', linestyle='--')
    # 在子图左上角标注斜率值
    plt.text(0.05, 0.95, f"Slope: {slope:.4f}", transform=plt.gca().transAxes, 
             bbox=dict(facecolor='white', alpha=0.8))
    plt.title(f"{col} vs Time")
    plt.xlabel("Time")
    plt.ylabel(col)

# 自动调整子图间距,避免重叠
plt.tight_layout()
plt.show()

# 打印所有列的斜率
print("各列拟合斜率:")
for col, slope in slope_dict.items():
    print(f"{col}: {slope:.4f}")

# 可选:将斜率结果保存到Excel文件
slope_df = pd.DataFrame.from_dict(slope_dict, orient='index', columns=['Slope'])
slope_df.to_excel("column_slopes.xlsx")

关键说明

  • 遍历每一列时,对当前列col调用stats.linregress(df['Time'], df[col])即可计算出对应斜率
  • 用字典slope_dict可以清晰存储列名与斜率的对应关系,方便后续调用
  • 调整子图布局为5行4列,避免原20行4列导致的图表过于狭长的问题
  • 可选添加拟合直线和斜率标注,让可视化结果更直观

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:15:27