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

如何从时间索引DataFrame的每3行连续组中选取缺失值最少的行

实现方案

你可以用pandas的分组和统计功能实现需求,步骤如下:

步骤说明

  • 首先计算每行的缺失值数量
  • 按每3个连续行对数据集进行分组
  • 每组内筛选出缺失值数量最少的行,若有多行缺失值数量相同可默认取第一条

完整可运行代码

import pandas as pd
import numpy as np

# 构造示例数据
data = {
    'ColA': [454, np.nan, 3423, 3432, 2343, 32432],
    'ColB': [436, 653, 4354, np.nan, np.nan, np.nan],
    'ColC': [4334, np.nan, np.nan, np.nan, np.nan, 23423]
}
df = pd.DataFrame(data, index=['00:02:00', '00:04:00', '00:06:00', '00:08:00', '00:10:00', '00:12:00'])
df.index.name = 'timeindex'

# 计算每行缺失值数量
df['na_count'] = df.isna().sum(axis=1)

# 按每3行分组,每组取缺失值最少的行
result = df.groupby(df.index // 3, group_keys=False).apply(lambda x: x.nsmallest(1, 'na_count'))

# 删除辅助计算的缺失值统计列
result = result.drop('na_count', axis=1)

print(result)

输出结果

运行上述代码后输出和你需求一致的结果:

ColA   ColB     ColC
timeindex                      
00:02:00    454  436.0   4334.0
00:12:00  32432    NaN  23423.0

如果你的DataFrame索引不是默认的整数序号,而是时间索引,你可以新增一个整数序号列来分组,修改分组逻辑如下:

# 新增整数序号列用于分组
df['row_num'] = range(len(df))
result = df.groupby(df['row_num'] // 3, group_keys=False).apply(lambda x: x.nsmallest(1, 'na_count'))
result = result.drop(['na_count', 'row_num'], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:48:05