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

Python高效向时间序列DataFrame插入指定行的方法

高效实现每日插入指定行的方案

核心思路

用Pandas的向量化操作替代逐行循环,通过筛选每日首尾行、批量生成新行再合并排序的方式,实现高效处理。

步骤代码

  1. 确保日期列类型正确
    先把date列转为带时区的datetime类型,避免时间计算错误:
import pandas as pd

# 假设你的原始DataFrame名为df
df['date'] = pd.to_datetime(df['date'], utc=True)
  1. 筛选每日首尾行
    先按时间排序,再提取每天的9:15首行和18:30末行:
# 按时间排序,保证数据时序正确
df = df.sort_values('date').reset_index(drop=True)

# 提取每天9:15的行
daily_first = df[df['date'].dt.time == pd.to_datetime('09:15:00').time()]
# 提取每天18:30的行
daily_last = df[df['date'].dt.time == pd.to_datetime('18:30:00').time()]
  1. 批量生成待插入的新行
    利用向量运算生成所有新行的字段:
# 新行的时间:当天9:15减1分钟
new_dates = daily_first['date'] - pd.Timedelta(minutes=1)

# 新行的x值:前一天18:30行的y值(第一天无前置数据,设为NaN,可按需调整)
new_x = daily_last['y'].shift(1).values
new_x[0] = pd.NA  # 可替换成你需要的默认值,比如daily_first['x'].iloc[0]

# 新行的y值:当天9:15行的x值
new_y = daily_first['x'].values

# 构造新行DataFrame
new_rows = pd.DataFrame({
    'date': new_dates,
    'x': new_x,
    'y': new_y
})
  1. 合并并排序
    把新行和原数据合并后按时间排序,确保新行处于正确位置:
# 合并原数据与新行
combined_df = pd.concat([df, new_rows], ignore_index=True)
# 按时间排序,保证新行在当天9:15行之前
combined_df = combined_df.sort_values('date').reset_index(drop=True)

关键注意事项

  • 如果原数据中存在某天缺失9:15或18:30行的情况,可改用groupby(df['date'].dt.date).first()/.last()来获取每日首尾行,替代直接筛选时间。
  • 时区处理要统一,避免跨时区计算出错。
  • 该方案全程用向量化操作,没有逐行循环,处理45天数据的速度会比循环实现快几个数量级,也不会产生多余的错误列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:12:31