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

如何在pandas DataFrame中查找多时间序列列重叠的最长有效周期

时间序列多列缺失清洗解决方案

你需要的功能直接用pandas就能实现,无需额外安装第三方库,以下是对应两个需求的实现方法:

1. 删除存在数据缺口的列

直接调用dropna方法按列删除含缺失值的列即可:

# 只要列中存在任意1个NaN就删除整列
df = df.dropna(axis=1, how='any')

# 如果仅需要删除全为空值的列,替换为how='all'
# df = df.dropna(axis=1, how='all')

2. 查找多数列同时存在有效数据的最长连续周期

实现逻辑为先统计每行的有效列数量,再筛选满足最少有效列要求的最长连续区间,示例代码如下:
首先构造你给出的测试数据集:

import pandas as pd
import numpy as np

# 构造示例数据
data = {
    'AEDC': [np.nan, np.nan, np.nan, np.nan, np.nan],
    'AGGI': [0.03, np.nan, np.nan, np.nan, 0.04],
    'AKVA': [0.04, 58.3, 58.9, np.nan, np.nan],
    'ALME': [0.0040, 0.0040, 0.0063, 0.0065, 0.0080],
    'ALOD': [0.38, np.nan, np.nan, np.nan, np.nan],
    'ALTX': [np.nan, 0.083, 0.083, 0.083, np.nan]
}
df = pd.DataFrame(
    data, 
    index=pd.to_datetime(['2014-01-02', '2014-01-03', '2014-01-06', '2014-01-07', '2014-01-08'])
)

然后执行周期查找逻辑:

# 统计每行的非空值数量
df['non_null_count'] = df.notna().sum(axis=1)

# 自定义最少同时有效列数,示例中为3列
# 如果要找有效列数最多的区间,可替换为 min_col = df['non_null_count'].max()
min_col = 3

# 标记满足有效列数要求的行
df['valid'] = df['non_null_count'] >= min_col

# 为连续的有效行划分分组
df['block'] = (df['valid'] != df['valid'].shift()).cumsum()

# 统计所有有效分组的时长、起止时间
valid_blocks = df[df['valid']].groupby('block').agg(
    start_date=('index', 'min'),
    end_date=('index', 'max'),
    duration=('index', 'count'),
    avg_non_null=('non_null_count', 'mean')
).sort_values('duration', ascending=False)

# 输出最长有效周期
longest_period = valid_blocks.iloc[0]
print(f"最长有效周期:{longest_period['start_date'].date()} 至 {longest_period['end_date'].date()}")
print(f"周期长度:{longest_period['duration']}天,平均有效列数:{longest_period['avg_non_null']:.0f}")

运行上述代码输出结果和你示例中的预期一致:

最长有效周期:2014-01-03 至 2014-01-06
周期长度:2天,平均有效列数:3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:36:03