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

如何利用Series的Datetime Index修改另一Series?KeyError报错排查

解决Datetime Index Series按日最小值索引修改另一Series的KeyError问题

我有两个带Datetime Index的Series,目标是在第二个Series每日最小值对应的索引位置,给第一个Series的浮点数值加1。执行以下代码时触发了KeyError:

ser_1.loc[ser_2.groupby(ser_2.index.day_of_year).idxmin()] += 1

报错信息:

raise KeyError(f"None of [{key}] are in the [{axis_name}]")

两个Series的结构如下:
ser_1(全年小时级数据):

2019-01-01 00:00:00    0.04980
2019-01-01 01:00:00    0.04426
2019-01-01 02:00:00    0.05100
2019-01-01 03:00:00    0.04627
2019-01-01 04:00:00    0.03978
                        ...   
2019-12-31 19:00:00    0.04773
2019-12-31 20:00:00    0.04600
2019-12-31 21:00:00    0.04220
2019-12-31 22:00:00    0.03974
2019-12-31 23:00:00    0.03888
Name: 0, Length: 8760, dtype: float64

ser_2(部分日期小时级数据):

2019-01-01 23:00:00    0.000
2019-01-02 00:00:00    0.000
2019-01-02 01:00:00    0.000
2019-01-02 02:00:00    0.000
2019-01-02 03:00:00    0.000
                       ...  
2019-12-13 06:00:00    1.534
2019-12-13 07:00:00    2.425
2019-12-13 08:00:00    1.622
2019-12-13 09:00:00    1.974
2019-12-13 10:00:00    1.729
Freq: H, Name: 1, Length: 8292, dtype: float64

问题原因

这个报错是索引匹配逻辑误解+函数使用细节共同导致的:

  • ser_2.groupby(ser_2.index.day_of_year).idxmin()返回的是一个特殊Series:它的索引是「年中第几天」的整数,值才是我们需要的、对应每日最小值的datetime索引。直接将这个Series传入ser_1.loc[]时,pandas会误把Series的整数索引当作匹配键,而非我们目标的datetime值,自然找不到对应索引,抛出KeyError。
  • ser_2的时间范围小于ser_1,但这不是直接报错原因,只是需要后续确保分组得到的datetime索引确实存在于ser_1中。

解决方案

提取idxmin()返回的datetime值作为索引,避免pandas的逻辑误解:

方法1:转为列表后匹配

# 获取每日最小值对应的datetime索引列表
min_indices = ser_2.groupby(ser_2.index.day_of_year).idxmin().tolist()
# 可选:过滤掉ser_1中不存在的索引(避免潜在问题)
valid_indices = [idx for idx in min_indices if idx in ser_1.index]
# 修改ser_1对应位置的值
ser_1.loc[valid_indices] += 1

方法2:直接提取Series的values

更简洁的写法,直接获取datetime值数组:

ser_1.loc[ser_2.groupby(ser_2.index.day_of_year).idxmin().values] += 1

方法3:按日期分组更直观

用normalize()将时间索引转为纯日期(YYYY-MM-DD)分组,可读性更强:

min_indices = ser_2.groupby(ser_2.index.normalize()).idxmin().tolist()
ser_1.loc[min_indices] += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:40:29