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

如何基于日期索引为Pandas DataFrame扩展前后2天的行?

解决Pandas DataFrame按日期索引扩展前后行的问题

嘿,我来帮你搞定这个需求!咱们的目标是给DataFrame里的每一行,围绕它的日期索引额外添加前后各2天的行,新增行的value值直接沿用原行的。下面我用具体的代码示例一步步实现:

步骤1:构造示例DataFrame

先创建一个简单的测试数据,方便后续演示效果:

import pandas as pd

# 构造测试数据
data = {'value': [10, 20, 30]}
# 设置日期索引
original_dates = pd.to_datetime(['2016-06-06', '2016-06-10', '2016-06-15'])
df = pd.DataFrame(data, index=original_dates)

print("原DataFrame:")
print(df)

输出的原数据长这样:

value
2016-06-06     10
2016-06-10     20
2016-06-15     30

步骤2:实现扩展核心逻辑

接下来编写核心代码,遍历每一行并生成对应的扩展行:

# 初始化空列表,用来存储所有扩展后的行数据
expanded_rows = []

# 遍历原DataFrame的每一行
for current_date, row in df.iterrows():
    # 生成当前日期前后各2天的日期范围(包含原日期)
    date_range = pd.date_range(
        start=current_date - pd.Timedelta(days=2),
        end=current_date + pd.Timedelta(days=2),
        freq='D'
    )
    # 为每个日期创建一行数据,value沿用原行的值
    for date in date_range:
        expanded_rows.append({'date': date, 'value': row['value']})

# 将列表转换为DataFrame,并设置date为索引
expanded_df = pd.DataFrame(expanded_rows).set_index('date')

print("\n扩展后的DataFrame:")
print(expanded_df)

执行后你会看到:每一行原数据都扩展成了5行(原日期+前后各2天),比如原索引2016-06-06的行,会新增2016-06-04、2016-06-05、2016-06-07、2016-06-08这4行,所有新增行的value都是10,完全符合你的需求。

额外小提示

  • 如果不同原行的扩展日期有重叠(比如两个原行的扩展范围出现重复日期),最终的DataFrame会保留这些重复行。如果需要合并重复日期的行,可以用expanded_df = expanded_df.groupby(expanded_df.index).agg({'value': 'first'})(或者根据需求选择求和、均值等聚合方式)。
  • 如果你不需要保留原日期的行,只需要新增的4行,可以在生成date_range后过滤掉原日期:date_range = date_range[date_range != current_date]。

内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:40:47