如何使用Python pandas实现5分钟间隔时序数据逐行按小时差值对比
解决方案
前置预处理
首先需要将时间列转换为pandas可识别的 datetime 格式,保证时间计算逻辑正常:
import pandas as pd df['timestamp'] = pd.to_datetime(df['timestamp']) df = df.sort_values('timestamp').reset_index(drop=True)
方法1:merge_asof 实现(兼容时间戳有秒级偏差场景)
该方案适配你提到的「相近时间点匹配」需求,哪怕两个匹配时间点存在秒级漂移也能正确匹配,是适用性最广的方案:
# 生成1小时前的匹配基准时间列 df['match_time'] = df['timestamp'] - pd.Timedelta(hours=1) # 按最近时间匹配1小时前的温度值 merged = pd.merge_asof( df, df[['timestamp', 'temp']].rename(columns={'timestamp': 'match_time', 'temp': 'temp_1h_ago'}), on='match_time', direction='nearest', # 匹配最接近的时间点 tolerance=pd.Timedelta(minutes=1) # 允许的最大时间偏差,避免匹配到间隔过大的异常点 ) # 计算温度差值,可按需删除辅助列 merged['temp_diff'] = merged['temp'] - merged['temp_1h_ago'] merged = merged.drop(columns=['match_time'])
方法2:shift 实现(仅适用于时间严格5分钟间隔无偏差场景)
如果你的数据没有采集漂移,每条数据间隔严格为5分钟,直接移动12行(1小时共12个5分钟间隔)即可实现需求,代码更简洁高效:
df = df.set_index('timestamp') # shift(12)表示将温度列向下偏移12行,对应1小时前同时间间隔的温度值 df['temp_diff'] = df['temp'] - df['temp'].shift(12)
内容的提问来源于stack exchange,提问作者mlmlmlm
相关产品推荐
相关产品推荐

