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

如何将DataFrame顶部多行移至底部并替换为新日期

将DataFrame顶部多行移至底部并更新日期

需要将DataFrame顶部4行移至底部,并更新这些行的date列,使其与原DataFrame的最后一行日期保持连续(例如原最后一行是2022-04-03,移动后的行日期依次为2022-04-04、2022-04-05等)。

修改后的完整代码

import pandas as pd
import numpy as np
from datetime import date, timedelta
from datetime import datetime 

# 读取Excel文件
names = ['date', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48]
df = pd.read_excel('Test.xlsx', header=None, names=names)

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

# 获取当前起始日期
a = df['date'].min()

# 输入新起始日期
b = input("Enter start date as dd-mm-YYYY")
b = datetime.strptime(b, "%d-%m-%Y")

# 计算星期几差值(保留原逻辑)
b2 = b.weekday()
a2 = a.weekday()
c = (b2 - a2)
print(c)

# --- 核心逻辑 ---
# 定义要移动的行数(这里为4行)
rows_to_move = 4

# 拆分DataFrame:剩余部分 + 要移动的顶部4行
df_remaining = df.iloc[rows_to_move:]
df_moved = df.iloc[:rows_to_move].copy()

# 生成移动行的连续日期:从原数据最后一天的下一天开始
last_date = df_remaining['date'].max()
new_dates = [last_date + timedelta(days=i+1) for i in range(rows_to_move)]
df_moved['date'] = new_dates

# 合并两部分并重置索引,保证索引连续
df = pd.concat([df_remaining, df_moved], ignore_index=True)

# 输出结果
print(df)

关键改动说明

  1. 批量移动行:用iloc直接拆分和拼接DataFrame,替代原循环单行移动的方式,效率更高且逻辑清晰。
  2. 生成连续日期:基于原数据的最后日期,通过timedelta为移动的每行生成递增的连续日期,确保日期无缝衔接。
  3. 重置索引:拼接时启用ignore_index=True,让新DataFrame的索引连续递增,匹配期望输出的格式。
  4. 统一日期类型:提前将date列转换为datetime类型,避免后续操作中出现类型不兼容的错误。

运行上述代码后,即可得到与期望一致的输出:顶部4行移至底部,且日期从原数据的最后一天之后开始连续。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:02:44