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

如何根据多个pandas DataFrame的最大起始日期按datetime裁剪数据集

问题分析

你的代码存在4个核心错误:

  • 切片逻辑完全反向:iloc[len(finalDateRange):, :]是丢弃前len(finalDateRange)行、只保留末尾部分行,和你要保留目标日期之后所有行的需求完全相反,这是输出结果只剩最后几十天数据的核心原因。
  • 日期处理逻辑错误:你提取的dic1[i]['Date'][0]是datetime.date类型,直接拼接字符串startDate + ' 00:00'会触发类型错误,且你没有对最大起始日期做+1天处理,不符合「取最大起始日期次日」的要求。
  • 裁剪逻辑不可靠:用固定长度切片没有考虑不同df的起始小时差异,很容易出现对齐错误,直接按日期字段过滤更准确。
  • 未重置索引:你期望输出的行号从0开始,原代码裁剪后保留了原df的旧索引,所以行号会从8000+开始。

正确实现代码

完整可运行的修改后代码如下:

import pandas as pd
import numpy as np

dateRange1 = pd.date_range('01/01/2020 04:00', '12/31/2020 23:00', freq='1H')
dateRange2 = pd.date_range('01/09/2020 08:00', '12/31/2020 23:00', freq='1H')
dateRange3 = pd.date_range('01/15/2020 11:00', '12/31/2020 23:00', freq='1H')

dic1 = {
    'df1': {
        'Date': dateRange1.date,
        'HE': dateRange1.hour,
        'Data': np.random.randint(1,100,len(dateRange1))
    },
'df2': {
        'Date': dateRange2.date,
        'HE': dateRange2.hour,
        'Data': np.random.randint(1,100,len(dateRange2))
    },
'df3': {
        'Date': dateRange3.date,
        'HE': dateRange3.hour,
        'Data': np.random.randint(1,100,len(dateRange3))
    }
}

dfList = {}
for i in dic1.keys():
    dfList[i] = pd.DataFrame(dic1[i])

# 计算所有df的最大起始日期,再+1天得到裁剪起点
max_start_date = max(df['Date'].min() for df in dfList.values())
cutoff_date = max_start_date + pd.Timedelta(days=1)

newDFList = {}
for name, df in dfList.items():
    # 按日期过滤后重置索引
    new_df = df[df['Date'] >= cutoff_date].reset_index(drop=True)
    newDFList[name] = new_df
    print(f"===== {name} =====")
    print(new_df)

运行后所有输出的DataFrame都会从2020-01-16开始,索引从0计数,长度完全一致,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:27:00