如何在Pandas DataFrame每行上下插入值为原值±1的新行
操作方案
你需要先把时间格式的字符串转为可运算的时间类型,再对每行做扩容处理,ffill是缺失值向前填充函数,和你需要的行扩容+值变换场景不匹配,所以无法实现需求。
具体实现代码
import pandas as pd # 示例原始DataFrame,time列为你提到的%H:%S格式字符串 df = pd.DataFrame({ "time": ["00:03", "00:05", "01:20"] }) # 1. 转换时间列为timedelta类型,支持秒级加减 # 如果你的时间格式包含其他维度,可调整为pd.to_datetime并指定format参数 df["time"] = pd.to_timedelta("00:" + df["time"]) # 2. 对每行生成 减1秒、原值、加1秒 三个值,再展开为多行 df = df.assign( time = df["time"].apply(lambda x: [ x - pd.Timedelta(seconds=1), x, x + pd.Timedelta(seconds=1) ]) ).explode("time") # 3. 可选:把时间列转回你需要的字符串格式 df["time"] = df["time"].dt.components.apply( lambda x: f"{x.hours:02d}:{x.seconds:02d}", axis=1 ) # 4. 重置索引得到最终结果 df = df.reset_index(drop=True)
运行后每行会自动扩展为三行,上下两行分别对应原行时间减1秒、加1秒,和你需要的效果一致。
内容的提问来源于stack exchange,提问作者Kamikaze K
相关产品推荐
相关产品推荐

