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

如何在DataFrame每行后插入4行,每行时间依次递增1小时

问题描述

现有如下pandas DataFrame,A列为日期时间数据:

AB
2015-01-10 00:00:0045
2017-12-19 10:00:0067
2020-09-02 21:00:0087

需要在每一行后插入4行数据,每行时间比原行依次增加1小时,新增行的B列留空,最终得到目标结果。

解决方案

下面提供两种简洁的实现方法:

方法1:分组扩展+时间偏移

import pandas as pd

# 确保A列为datetime类型(原始数据非datetime时执行)
df['A'] = pd.to_datetime(df['A'])

# 为每行添加唯一组标识
df['group_id'] = df.index

# 每个组重复5次(原行+4条新增行)
expanded_df = df.loc[df.index.repeat(5)].reset_index(drop=True)

# 计算组内时间偏移:第0行偏移0小时,第1行+1h...第4行+4h
expanded_df['A'] = expanded_df['A'] + pd.to_timedelta(expanded_df.groupby('group_id').cumcount(), unit='hour')

# 仅保留原行(组内第0行)的B值,其余设为空
expanded_df.loc[expanded_df.groupby('group_id').cumcount() != 0, 'B'] = pd.NA

# 移除临时组标识列,得到最终结果
df_new = expanded_df.drop('group_id', axis=1)

方法2:生成时间序列+explode

这种方法代码更简洁,适合中小数据量场景:

import pandas as pd

# 转换A列为datetime类型
df['A'] = pd.to_datetime(df['A'])

# 为每行生成包含5个连续小时时间点的序列
df['A'] = df['A'].apply(lambda dt: pd.date_range(start=dt, periods=5, freq='h'))

# 展开序列为独立行
df_new = df.explode('A').reset_index(drop=True)

# 仅保留每组第1行的B值,其余设为空
df_new['B'] = df_new['B'].where(df_new.index % 5 == 0, pd.NA)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:55:29