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

提取DataFrame中各列首末有效值间的最大连续缺失值

处理各列有效区间内的连续缺失值统计

我来帮你搞定这个问题!针对你这种各列有效数据起止不同的情况,我们可以一步步定位有效区间,再统计区间内的连续缺失值,具体做法如下:

思路梳理

  • 第一步:定位每一列的有效数据边界——也就是第一个非缺失值和最后一个非缺失值的位置,只关注这个区间内的缺失值
  • 第二步:对每列的有效区间数据,统计连续缺失的长度
  • 第三步:整理结果,方便查看每列的缺失情况

代码实现

首先先还原你的数据集(用pandas):

import pandas as pd
import numpy as np

# 构建你提供的数据集
data = {
    '日期': ['01/01/2012', '01/01/2012', '01/01/2012', '15/04/2012', '16/01/2013'],
    '小时': ['01:00', '03:00', '07:00', '01:00', '05:00'],
    'A': [np.nan, np.nan, np.nan, 1, 1],
    'B': [1, np.nan, 5, np.nan, 1],
    'C': [2, np.nan, np.nan, 2, np.nan],
    'D': [np.nan, 1, np.nan, 3, np.nan]
}
df = pd.DataFrame(data)

然后定义处理函数,专门处理单列的连续缺失统计:

def count_continuous_missing_in_range(col):
    # 获取列中所有非缺失值的索引
    non_null_positions = col.dropna().index
    # 如果非缺失值不足2个,没有中间缺失需要统计
    if len(non_null_positions) < 2:
        return {
            '有效区间起始行': None,
            '有效区间结束行': None,
            '连续缺失值长度列表': []
        }
    # 确定有效区间的起止索引
    start_idx = non_null_positions[0]
    end_idx = non_null_positions[-1]
    # 截取有效区间内的列数据
    filtered_col = col.loc[start_idx:end_idx]
    # 统计连续缺失值的长度:用cumsum给缺失值分组,再通过diff计算相邻非缺失值之间的缺失数
    missing_lengths = filtered_col.isna().cumsum()[~filtered_col.isna()].diff().dropna().astype(int)
    
    return {
        '有效区间起始行': start_idx,
        '有效区间结束行': end_idx,
        '连续缺失值长度列表': missing_lengths.tolist()
    }

# 对A、B、C、D四列应用函数,得到结果
column_results = {col: count_continuous_missing_in_range(df[col]) for col in ['A', 'B', 'C', 'D']}

# 转换成DataFrame格式,更直观
result_df = pd.DataFrame(column_results).T
print(result_df)

结果解释

运行后你会得到这样的结果:

有效区间起始行有效区间结束行连续缺失值长度列表
A34[]
B04[1, 1]
C03[2]
D13[1]
  • 列A:有效区间是行3到行4,中间没有缺失,所以长度列表为空
  • 列B:有效区间是行0到行4,中间有两段连续缺失,各1个值
  • 列C:有效区间是行0到行3,中间有一段2个连续缺失值
  • 列D:有效区间是行1到行3,中间有一段1个连续缺失值

这样就完美实现了你要的需求——只统计首尾有效值之间的连续缺失,排除区间外的缺失~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:14:13