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

如何为DataFrame的子集添加timedelta时间增量

给DataFrame指定时间区间的Datetime添加1小时Timedelta的解决方案

先构造示例数据

基于你提供的时间列表创建两种场景的DataFrame:

import pandas as pd

dt_list = [
    "2022-06-01 00:30:00", "2022-06-01 01:00:00",
    "2022-06-01 01:30:00", "2022-06-01 02:00:00",
    "2022-06-01 02:30:00", "2022-06-01 03:00:00",
    "2022-06-01 03:30:00", "2022-06-01 04:00:00",
    "2022-06-01 04:30:00", "2022-06-01 05:00:00",
    "2022-06-01 05:30:00", "2022-06-01 06:00:00",
    "2022-11-16 06:30:00", "2022-11-16 07:00:00",
    "2022-11-16 07:30:00", "2022-11-16 08:00:00"
]

# 场景1:Datetime作为索引
df_index = pd.DataFrame({'value': range(len(dt_list))}, index=pd.to_datetime(dt_list))

# 场景2:Datetime作为普通列
df_col = pd.DataFrame({'datetime': pd.to_datetime(dt_list), 'value': range(len(dt_list))})

场景1:Datetime是DataFrame索引

用.loc安全定位时间区间并修改索引:

start = "2022-06-01 02:00:00"
end = "2022-06-01 04:00:00"

# 方法1:直接定位区间修改
df_index.loc[start:end] = df_index.loc[start:end].assign(index=lambda x: x.index + pd.Timedelta(hours=1))
df_index.index = df_index.index.rename(None)  # 无需修改索引名可删除此行

# 方法2:用where条件批量处理(更灵活)
target_range = pd.date_range(start, end, freq='30T')
df_index.index = df_index.index.where(~df_index.index.isin(target_range), 
                                      df_index.index + pd.Timedelta(hours=1))

注意:避免直接链式索引(如df_index[start:end].index += ...),这种操作可能修改临时副本而非原DataFrame,导致修改不生效或触发SettingWithCopyWarning。


场景2:Datetime是普通列

用布尔掩码筛选目标区间,通过.loc完成赋值:

start = pd.to_datetime("2022-06-01 02:00:00")
end = pd.to_datetime("2022-06-01 04:00:00")

# 构造布尔掩码定位目标行
mask = (df_col['datetime'] >= start) & (df_col['datetime'] <= end)

# 给区间内的datetime加1小时
df_col.loc[mask, 'datetime'] += pd.Timedelta(hours=1)

关键:必须用.loc同时定位行和列,确保修改的是原DataFrame的数据源,而非临时生成的副本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:55:16