如何计算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
相关产品推荐
相关产品推荐

