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

如何为DataFrame分组填充缺失的固定序列数据?

解决分组缺失序列填充问题

你的需求是按组内的位置填充固定序列,fillna(method='ffill')仅能做行方向的前向填充,无法满足按组内位置匹配填充的要求。以下用Python的pandas库解决数据量较大的场景:

步骤1:构造并预处理数据

先模拟你的数据集,将空字符串转为NaN方便后续处理:

import pandas as pd
import numpy as np

# 模拟原始数据集
data = {
    'index': [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5],
    'string': ['2008','2009','2010','','','','2008','2009','2010','2008','2009','2010','','','']
}
df = pd.DataFrame(data)
# 把空字符串转为NaN
df['string'] = df['string'].replace('', np.nan)

步骤2:添加组内序号

给每个index组的行按顺序分配序号(0、1、2),用于匹配固定序列的位置:

df['group_seq'] = df.groupby('index').cumcount()

步骤3:提取序列映射

从任意完整的组中提取“组内序号-对应值”的映射关系:

# 从非缺失的行中提取映射
seq_map = df.dropna(subset=['string']).set_index('group_seq')['string'].to_dict()

步骤4:填充缺失值

用映射关系给所有缺失的string值填充对应位置的内容:

df['string'] = df['group_seq'].map(seq_map)
# 移除临时的组内序号列
df = df.drop('group_seq', axis=1)

处理后的数据将完全符合你期望的结果:

index string
0       1   2008
1       1   2009
2       1   2010
3       2   2008
4       2   2009
5       2   2010
6       3   2008
7       3   2009
8       3   2010
9       4   2008
10      4   2009
11      4   2010
12      5   2008
13      5   2009
14      5   2010

扩展说明

如果每组的行数不是固定3个,只要所有组的行数一致,该方法依然适用——cumcount()会自动给每组的行按顺序分配序号,只要有至少一个完整组提供映射,就能给所有缺失组填充对应位置的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:40:40