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

如何用Python按组填充数据集NA值(无需均值/众数)

按分组填充缺失值为组内任意有效值的Python实现

问题描述

现有包含缺失值的数据集:

group   rate   type     feat.
A       #NA      L       100 
A        2      #NA      150
A        2       M       100
B        3       M       #NA
B       #NA      M       #NA
B       #NA      M       200
B       #NA     #NA      200
C        9       H       300
C        9       H       300

需求:按group分组,将每组内的缺失值(#NA)填充为该分组内任意一个现有有效值,无需使用均值或众数方法。示例输出如下:

group   rate   type     feat.
A        2       L       100 
A        2       L       150
A        2       M       100
B        3       M       200
B        3       M       200
B        3       M       200
B        3       M       200
C        9       H       300
C        9       H       300

实现步骤与代码

使用Python的pandas库可以快速实现该需求,核心思路是按group分组后,用组内的任意非缺失值填充对应列的缺失值。

1. 导入库并构造数据集

首先将原始数据中的#NA替换为pandas识别的NaN:

import pandas as pd
import numpy as np

# 构造原始数据集,将#NA转换为NaN
data = {
    'group': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'],
    'rate': [np.nan, 2, 2, 3, np.nan, np.nan, np.nan, 9, 9],
    'type': ['L', np.nan, 'M', 'M', 'M', 'M', np.nan, 'H', 'H'],
    'feat.': [100, 150, 100, np.nan, np.nan, 200, 200, 300, 300]
}
df = pd.DataFrame(data)

2. 按分组填充缺失值

通过groupby分组后,使用transform对每个列执行填充操作,这里选择组内第一个非缺失值作为填充值(若需要随机选有效值,可替换为随机采样的方式):

# 按group分组,对每列填充组内第一个非缺失值
filled_df = df.groupby('group').transform(lambda x: x.fillna(x.dropna().iloc[0]))
# 还原group列(transform会保留索引,需重新关联)
filled_df['group'] = df['group']
# 调整列顺序与原始数据集一致
filled_df = filled_df[['group', 'rate', 'type', 'feat.']]

# 打印结果
print(filled_df)

3. 输出结果

运行上述代码后,输出结果与示例一致:

group  rate type  feat.
0     A   2.0    L    100
1     A   2.0    L    150
2     A   2.0    M    100
3     B   3.0    M    200
4     B   3.0    M    200
5     B   3.0    M    200
6     B   3.0    M    200
7     C   9.0    H    300
8     C   9.0    H    300

可选:随机选择组内有效值填充

如果需要随机选择组内的有效值填充(而不是固定第一个),可以将填充逻辑改为随机采样:

filled_df = df.groupby('group').transform(
    lambda x: x.fillna(x.dropna().sample(1).iloc[0])
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:35:25