Pandas时间序列按日分组每5条求均值出现IndexingError如何解决
报错原因
- 执行
df['debitVD']后得到的是一维Series对象,仅支持行维度索引,而代码中.iloc[i:i + 5, :]传入了行、列两个索引参数,超出了Series的索引维度限制,因此触发Too many indexers报错。 - 额外注意:你第二段代码存在缩进错误,循环体内的代码没有正确缩进,修正索引问题前需要先调整缩进格式。
修复方案
基础修复(保留原有循环逻辑)
直接删除.iloc中的列索引参数:即可,同时可优化冗余的get_group调用(循环迭代groupby对象时拿到的item本身就是对应分组的DataFrame):
# 若数据集存在跨月场景,建议将dt.day替换为dt.date,避免不同月份的同一天被分到同一组 dftec = dftec.groupby([dftec["Datetime"].dt.date]) for key, item in dftec: d = [] df = item print(df) # 若需要包含第一条数据,可将range的起始值从1改为0 for i in range(1, df.shape[0], 5): d.append(df['debitVD'].iloc[i:i + 5].mean()) print(d)
优化写法(无需嵌套循环,效率更高)
用pandas的分组apply逻辑替代手写循环,代码更简洁:
res = dftec.groupby(dftec["Datetime"].dt.date)['debitVD'].apply( lambda x: [x.iloc[i:i+5].mean() for i in range(1, len(x), 5)] ) # res的每一行对应一天的所有5条均值结果
内容的提问来源于stack exchange,提问作者Nabil Kl
相关产品推荐
相关产品推荐

