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

从大型Pandas DataFrame获取连续0值行索引的问题与解决

识别能耗数据中连续0值长时段的问题与解决

问题场景

我手头有一份按半小时统计能耗的数据集,目标是提取energy(kWh/hh)列中连续0值行的索引列表,以此识别长时间无能耗的时段。

数据集前几行示例:

LCLid       tstp                          energy(kWh/hh)
MAC000002   2012-10-12 00:30:00.0000000   0.0
MAC000002   2012-10-12 01:00:00.0000000   0.0
MAC000002   2012-10-12 01:30:00.0000000   0.0
MAC000002   2012-10-12 02:00:00.0000000   0.0
MAC000002   2012-10-12 02:30:00.0000000   0.0

我想要的输出是类似这样的嵌套列表,每个子列表对应一段连续0值的行索引:

[[0,1,2,...], [861958,861959,...], ...]

最初的尝试代码

我用more_itertools来分组连续索引,一开始运行正常,但后来出现了错误:部分非0值的行索引被错误加入结果,比如行1543677的能耗值是0.105却出现在列表里,而真正的0值行(比如行849246)是正常的。

代码如下:

import more_itertools as mit
indices = df.loc[df[df.columns[2]] == df[df.columns[2]].isnull()].index.values.tolist()
outages_indices = [list(group) for group in mit.consecutive_groups(indices)]
long_outages_indices = []
for i in outages_indices:
    if len(i) >= 8:
        long_outages_indices.append(i)

问题原因与解决方法

经过排查,发现问题出在多CSV文件合并的环节:我是把多个CSV文件合并成一个DataFrame的,但每个新导入的CSV都会自动从0开始生成索引,导致整个DataFrame的索引出现重复、不连续的情况,这就打乱了后续识别连续索引的逻辑。

解决方法非常直接,在完成所有CSV文件的合并后,重置整个DataFrame的索引:

# 合并完所有CSV后执行
df = df.reset_index(drop=True)

重置索引后,整个DataFrame的索引变成连续且唯一的序列,再运行原来的筛选代码,就能准确得到符合要求的连续0值行索引列表了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:57:41