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

Pandas时间resample重采样报非唯一索引重索引错误求助

问题根因

触发ValueError: cannot reindex a non-unique index with a method or limit的核心原因有两个:

  • 代码存在明显笔误:时间列转换时引用的对象名dfinal、设置索引时传入的列名tijd均和你定义的DataFrame、时间列名datetime不匹配,直接导致设置后的索引不存在或存在大量重复非唯一值。
  • pandas规则限制:resample后调用的pad()(即向前填充ffill)属于带填充逻辑的重索引操作,这类操作不允许在存在重复值的非唯一索引上执行。

另外你直接调用pad()的逻辑也不符合需求:pad()是对整行做向前填充,无法实现“分散在不同时间点的单列有效值,按15分钟窗口聚合”的目标。

正确实现方案

按以下步骤处理即可解决报错并得到符合预期的重采样结果:

  1. 修正笔误,将datetime列正确转为pandas时间类型
  2. 设置时间列为索引并排序,对可能存在的重复时间索引做去重处理,保证索引唯一
  3. 按15分钟间隔重采样,对每个窗口内的列取有效值,再补全窗口内无有效值的列即可

可直接运行的参考代码:

import pandas as pd

# 时间列类型转换,修正原有笔误
df["datetime"] = pd.to_datetime(df["datetime"])
# 设置时间索引、排序、去重,保证索引唯一
df = df.set_index("datetime").sort_index()
df = df[~df.index.duplicated(keep="last")]

# 15分钟重采样:窗口左边界作为标签,取窗口内各列第一个非空值,空值向前填充
resampledata = df.resample("15T", label="left").first().ffill()

如果需要取每个时间窗口内最后一个非空值,把代码中first()替换为last()即可。

注:你给出的期望输出中23:15窗口C列值为65,是因为该值落在23:00-23:15窗口的末尾,使用last()作为聚合函数即可得到该结果,可根据实际业务逻辑选择聚合规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:12:32