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

如何查找pandas DataFrame中最长连续NaN分组并返回其首尾索引

Pandas查找最长连续NaN分组的首尾索引实现方法

问题需求

  • 查找DataFrame中长度最长的连续NaN值分组
  • 返回该分组对应的第一个索引和最后一个索引

示例输入的DataFrame如下:

import pandas as pd
import numpy as np

col1 = {"a" : [1, np.nan, np.nan, np.nan, 2, 3, 4 , np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,]}
df = pd.DataFrame(data=col1)

示例预期输出:(7, 12)

实现代码

# 标记连续分组:连续NaN会被分配同一个分组编号
groups = df['a'].isna().ne(df['a'].isna().shift()).cumsum()
# 筛选仅包含NaN的分组
nan_groups = groups[df['a'].isna()]
# 找到长度最大的NaN分组
max_len_group = nan_groups.value_counts().idxmax()
# 提取对应分组的首尾索引
res = (nan_groups[nan_groups == max_len_group].index[0], nan_groups[nan_groups == max_len_group].index[-1])
print(res)

逻辑说明

  • 先通过isna()把所有NaN位置标记为布尔值True,非NaN为False
  • 用ne().cumsum()逻辑给连续的相同布尔值分配同一个分组编号,实现连续段的拆分
  • 过滤仅保留NaN对应的分组,统计各分组长度后找到最长分组
  • 直接提取最长分组对应的索引序列的第一个和最后一个值,就是需要的首尾索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:48:01