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

如何用Pandas复制数据行并按周更新日期以完成周度数据上传?

需求说明

每周需上传与上周内容一致的数据集,仅将日期向后顺延一周。现有Pandas数据示例如下,目标是生成包含原日期及顺延一周后日期的数据集(复制原有数据并更新日期为原日期加7天)。

原数据示例

import pandas as pd  
data = {'Date': ['02/01/2023', '02/01/2023', '02/01/2023', '02/01/2023']
        , 'Where': ['Spain', 'Spain', 'France', 'France']
        , 'Metric': ['Holiday', 'Holiday', 'Expected', 'Expected']
        , 'Value': [1, 0, 10, 5]}  
df = pd.DataFrame(data)  
print(df)

对应数据表:

DateWhereMetricValue
02/01/2023SpainHoliday1
02/01/2023SpainHoliday0
02/01/2023FranceExpected10
02/01/2023FranceExpected5

用户已编写部分日期处理代码,但未实现数据复制:

from datetime import timedelta, date

def daterange(start_date, end_date):
    for n in range(0, int((end_date - start_date).days) + 1, 7):
        yield start_date + timedelta(n)

start_dt = date(2023, 01, 02) # 需要动态获取现有数据中的最后日期
end_dt = date(2023, 01, 02)
完整解决方案

直接用Pandas的日期处理和数据拼接功能即可实现需求,步骤如下:

步骤1:转换日期列类型

先把原数据的Date列从字符串转为Pandas datetime类型,方便后续日期计算:

import pandas as pd

# 加载原数据
data = {'Date': ['02/01/2023', '02/01/2023', '02/01/2023', '02/01/2023']
        , 'Where': ['Spain', 'Spain', 'France', 'France']
        , 'Metric': ['Holiday', 'Holiday', 'Expected', 'Expected']
        , 'Value': [1, 0, 10, 5]}  
df = pd.DataFrame(data)

# 转换为datetime格式(匹配原数据的MM/DD/YYYY格式)
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y')

步骤2:复制数据并更新日期

复制原数据集,将复制后的Date列加上7天:

# 复制原数据
df_next_week = df.copy()
# 日期顺延一周
df_next_week['Date'] = df_next_week['Date'] + pd.Timedelta(days=7)

步骤3:合并数据集

用pd.concat合并原数据和更新后的数据集,得到包含原日期和顺延一周日期的完整数据:

final_df = pd.concat([df, df_next_week], ignore_index=True)

步骤4:(可选)转回原日期字符串格式

如果需要将日期转回原有的MM/DD/YYYY字符串格式:

final_df['Date'] = final_df['Date'].dt.strftime('%m/%d/%Y')

最终结果

打印final_df会输出:

Date   Where    Metric  Value
0  02/01/2023  Spain   Holiday      1
1  02/01/2023  Spain   Holiday      0
2  02/01/2023  France  Expected     10
3  02/01/2023  France  Expected      5
4  02/08/2023  Spain   Holiday      1
5  02/08/2023  Spain   Holiday      0
6  02/08/2023  France  Expected     10
7  02/08/2023  France  Expected      5

动态获取最后日期(适配多日期场景)

如果数据中包含多个日期,需要动态获取最后日期并生成多周顺延数据:

# 获取数据中的最新日期
last_date = df['Date'].max()
# 生成原日期+顺延2周的日期列表(可按需调整周数)
date_list = [last_date + pd.Timedelta(days=7*i) for i in range(3)]

# 循环复制数据并合并
final_df = df.copy()
for d in date_list[1:]: # 跳过原日期,只处理顺延的日期
    temp_df = df.copy()
    temp_df['Date'] = d
    final_df = pd.concat([final_df, temp_df], ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:25:20