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

如何基于字符串分组列,使用Pandas Transform实现分组均值插补?

解决方案:按字符串列分组,用组内均值填充数值列缺失值

没问题,针对你这种以字符串类型列(比如车型)分组填充数值列缺失值的场景,用Pandas的groupby + transform组合就能完美解决,我给你一步步拆解实现方法,附样本数据和代码:

1. 先构造符合你场景的样本数据

假设你的数据长这样(你可以直接替换成自己的真实数据集):

import pandas as pd
import numpy as np

# 构造样本数据:车型是字符串列,里程、发动机功率存在缺失值
data = {
    'Car Model': ['Toyota Camry', 'Toyota Camry', 'Honda Accord', 'Honda Accord', 'Toyota Camry', 'Honda Accord', 'Ford F-150', 'Ford F-150'],
    'Mileage': [50000, np.nan, 60000, np.nan, 55000, 62000, np.nan, 70000],
    'Engine Power': [178, np.nan, 192, 190, np.nan, np.nan, 375, np.nan]
}

df = pd.DataFrame(data)

2. 核心实现代码

关键是先指定需要填充的数值列,然后按字符串分组后用transform计算组内均值并填充缺失值:

# 定义需要填充的数值列(根据你的实际列名调整)
num_cols = ['Mileage', 'Engine Power']

# 按车型分组,对每组的数值列用组内均值填充缺失值
df[num_cols] = df.groupby('Car Model')[num_cols].transform(
    lambda x: x.fillna(x.mean())
)

3. 代码解释

  • groupby('Car Model'):以字符串类型的车型列为分组依据,把相同车型的行归为一组
  • transform(lambda x: x.fillna(x.mean())):对每个组的每个数值列,计算该组的均值,然后用这个均值替换组内该列的所有缺失值。transform的作用是让结果保持和原DataFrame相同的索引,不会打乱原有数据结构
  • 只对num_cols指定的数值列操作,避免误修改字符串列

4. 特殊情况处理(可选)

如果某个车型组内的某列全部是缺失值,那x.mean()会得到NaN,这时候可以用全局均值兜底:

df[num_cols] = df.groupby('Car Model')[num_cols].transform(
    lambda x: x.fillna(x.mean() if not pd.isna(x.mean()) else df[x.name].mean())
)

验证结果

执行完代码后,你可以用df.isnull().sum()检查缺失值是否已经被填充,或者直接打印df查看具体填充后的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:37:30