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

pandas使用combine_first合并Series在夏令时切换日报错如何解决

报错原因

该错误由夏令时切换导致的时间索引重复触发:

  • 2020年10月25日为欧洲柏林时区的夏令时转冬令时节点,当日时钟会从凌晨2点拨回至1点,出现重复的1点时段。
  • 你生成的fr2是fr1偏移12小时得到的,部分时间戳刚好落在该重复时段,最终导致d2的索引存在重复值。
  • combine_first操作内部会执行重索引逻辑,pandas不允许对存在重复值的轴执行重索引,因此抛出ValueError: cannot reindex from a duplicate axis。
可行解决方案

以下方案均保留d2取值优先级高于d1的逻辑:

  • 方案1:转UTC时区完成合并后再转原时区
    UTC不存在夏令时切换,不会产生重复索引,是最稳妥的处理方式:
# 两个序列统一转UTC
d1_utc = d1.tz_convert("UTC")
d2_utc = d2.tz_convert("UTC")
# 合并后转原时区
res = d2_utc.combine_first(d1_utc).tz_convert("Europe/Berlin")
  • 方案2:先对索引去重再合并
    如果不需要保留重复时间戳的多条数据,可先对优先级更高的序列去重,再执行合并:
# keep='first'保留优先序列的第一条数据,可根据需求调整为'last'
d2_dedup = d2[~d2.index.duplicated(keep='first')]
d1_dedup = d1[~d1.index.duplicated(keep='first')]
res = d2_dedup.combine_first(d1_dedup)
  • 方案3:用concat+groupby实现合并逻辑
    该方式绕过重索引步骤,天然支持重复索引场景,优先级控制更灵活:
# 优先把d2放在前面,groupby后取第一个出现的值,即实现d2优先级更高的效果
res = pd.concat([d2, d1]).groupby(level=0).first()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:27:00