如何查找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
相关产品推荐
相关产品推荐

