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

如何计算DataFrame中指定时间区间内各数值列的斜率?

计算DataFrame中PE/CE列在指定时间区间内的斜率

实现步骤与代码

直接通过数据处理+线性拟合完成需求,代码如下:

import pandas as pd
import numpy as np

# 1. 构造示例DataFrame(替换为你的实际数据)
data = {
    'PE': [362.30, 365.30, 367.20, 360.30, 356.70, 355.30, 354.40, 350.80, 349.10, 350.05,
           352.05, 350.25, 348.63, 349.05, 345.65, 346.85, 348.55, 349.55, 348.25, 347.30],
    'CE': [304.70, 303.60, 302.30, 309.80, 310.25, 311.70, 312.98, 316.70, 318.95, 317.45,
           315.95, 316.65, 318.35, 315.95, 320.15, 319.95, 317.20, 316.26, 317.10, 318.50],
    'time': ['09:42', '09:43', '09:44', '09:45', '09:46', '09:47', '09:48', '09:49', '09:50', '09:51',
             '09:52', '09:53', '09:54', '09:55', '09:56', '09:57', '09:58', '09:59', '10:00', '10:01']
}
df = pd.DataFrame(data)

# 2. 转换时间格式并筛选目标区间
df['time'] = pd.to_datetime(df['time'], format='%H:%M')
# 可直接修改start_time变量调整起始时间,比如改为'10:00'
start_time = pd.to_datetime('09:42', format='%H:%M')
end_time = pd.to_datetime('12:00', format='%H:%M')

filtered_df = df[(df['time'] >= start_time) & (df['time'] <= end_time)]

# 3. 处理空数据情况
if filtered_df.empty:
    print("指定时间区间内无有效数据")
else:
    # 将时间转换为相对于起始时间的分钟数(作为线性回归的自变量)
    filtered_df['minutes_since_start'] = (filtered_df['time'] - start_time).dt.total_seconds() / 60
    
    # 4. 计算PE和CE列的斜率
    pe_slope, _ = np.polyfit(filtered_df['minutes_since_start'], filtered_df['PE'], 1)
    ce_slope, _ = np.polyfit(filtered_df['minutes_since_start'], filtered_df['CE'], 1)
    
    print(f"PE列斜率(每分钟变化量): {pe_slope:.4f}")
    print(f"CE列斜率(每分钟变化量): {ce_slope:.4f}")

关键说明

  • 时间转换:把字符串时间转为datetime类型,才能进行区间比较和数值化处理。
  • 区间筛选:仅保留起始时间到12:00之间的数据,确保计算范围准确。
  • 自变量处理:将时间转为相对于起始时间的分钟数,让线性回归能直接计算数值随时间的变化率。
  • 斜率计算:使用np.polyfit进行一次线性拟合,返回的第一个值即为斜率,代表每单位时间的数值变化量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:48:05