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

如何将时间戳外推至10分钟粒度并按规则回填var1字段

实现步骤与代码

1. 数据预处理

先把原始数据的timestamp转换为datetime类型,再计算每个记录对应的有效填充窗口(原始时间点前3小时到该时间点):

import pandas as pd

# 原始数据
data = {
    'timestamp': ['2020-07-05 10:32:00', '2020-07-05 18:22:00', '2020-07-05 22:30:00', '2020-07-06 09:13:00'],
    'var1': [2, 8, 6, 5]
}
df1 = pd.DataFrame(data)

# 转换timestamp为datetime类型
df1['timestamp'] = pd.to_datetime(df1['timestamp'])

# 计算每个记录的填充窗口:前3小时到当前时间点
df1['window_start'] = df1['timestamp'] - pd.Timedelta(hours=3)
df1['window_end'] = df1['timestamp']

2. 生成10分钟间隔的时间序列

基于所有有效窗口的时间范围,生成连续的10分钟刻度时间序列:

# 确定时间范围边界,对齐到10分钟刻度
start_time = df1['window_start'].min().floor('10min')
end_time = df1['window_end'].max().ceil('10min')

# 生成10分钟间隔的时间序列
time_range = pd.date_range(start=start_time, end=end_time, freq='10T')
result_df = pd.DataFrame({'timestamp': time_range})

3. 匹配窗口并填充数值

用merge_asof高效匹配每个时间点对应的有效窗口,超出窗口的时间点标记为N/A:

# 排序以满足merge_asof的要求
df1_sorted = df1.sort_values('window_start')
result_df_sorted = result_df.sort_values('timestamp')

# 按时间匹配最近的窗口起始点
merged = pd.merge_asof(
    result_df_sorted,
    df1_sorted[['window_start', 'window_end', 'var1']],
    left_on='timestamp',
    right_on='window_start',
    direction='backward'
)

# 过滤掉超出窗口结束时间的记录,设置为N/A
merged['var1'] = merged.apply(
    lambda row: row['var1'] if row['timestamp'] <= row['window_end'] else 'N/A',
    axis=1
)

# 整理最终结果
final_df = merged[['timestamp', 'var1']].sort_values('timestamp').reset_index(drop=True)

结果说明

运行后final_df完全符合需求:

  • 时间点按10分钟间隔连续排列
  • 原始记录对应的前3小时窗口内填充对应var1值
  • 窗口外的时间点显示N/A

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:45:27