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

Python为pandas DataFrame分类列新增类别并填充值的方法

操作实现步骤

你可以通过维度补全的方式快速实现新增类别、对应均值字段填充的需求,具体操作如下:
首先提前导入需要的依赖,如果你已经在运行环境里加载了自有数据集,可以跳过构造示例数据的步骤:

import pandas as pd
import numpy as np

# 构造和你给出的示例完全一致的测试数据集
df = pd.DataFrame([
    ["A",1,1,0.5],["A",1,2,0.3],["A",2,1,0.2],["A",3,1,0.1],["A",3,2,2.5],
    ["B",1,1,2.3],["B",1,2,5.2],["B",2,1,1.2],["B",2,2,8.0],["B",3,1,2.3],["B",3,2,0.9]
], columns=["name","product","Facility","mean"])

方法一:全量维度组合补全(推荐)

这个方法会自动保留原有所有数据,同时补全三个字段所有合法取值的交叉组合,不会出现遗漏:

  1. 先定义每个维度的完整取值列表,把你要新增的Facility=3、product=4加入对应列表
  2. 生成三个维度的全量组合索引,和原表做匹配
  3. 缺失的mean值按需填充为0或者NA即可
# 定义各维度全量合法取值
full_dimensions = {
    "name": df["name"].unique(),
    "product": [1, 2, 3, 4],  # 原有取值1/2/3 + 新增类别4
    "Facility": [1, 2, 3]     # 原有取值1/2 + 新增类别3
}

# 生成全量组合索引
full_index = pd.MultiIndex.from_product(
    iterables=full_dimensions.values(),
    names=full_dimensions.keys()
)

# 匹配原表数据,补全缺失组合
df_result = df.set_index(["name","product","Facility"]).reindex(full_index).reset_index()

# 填充mean值:需要填0就执行下面这行,需要填NA(pandas默认缺失值)就注释掉这行
df_result["mean"] = df_result["mean"].fillna(0)

方法二:手动追加指定行

如果你不需要补全所有交叉组合,只需要追加指定的新增类别行,可以直接构造新行拼接到原表:

new_rows = []
# 遍历所有name值,给每个name生成对应的新类别行
for name_val in df["name"].unique():
    # 追加Facility=3对应的所有product行
    for product_val in [1,2,3,4]:
        new_rows.append({
            "name": name_val,
            "product": product_val,
            "Facility": 3,
            "mean": 0  # 要填充NA就把0改成np.nan
        })
    # 追加product=4对应的原有Facility(1、2)行
    for facility_val in [1,2]:
        new_rows.append({
            "name": name_val,
            "product": 4,
            "Facility": facility_val,
            "mean": 0
        })

# 拼接新行到原表,去重避免重复数据
df_result = pd.concat([df, pd.DataFrame(new_rows)]).drop_duplicates(
    subset=["name","product","Facility"],
    keep="first"
).reset_index(drop=True)

结果校验

处理完成后可以执行以下代码确认结果符合预期:

# 确认Facility列包含新增的3
print("Facility列所有取值:", df_result["Facility"].unique())
# 确认product列包含新增的4
print("product列所有取值:", df_result["product"].unique())
# 查看新增类别的mean值填充情况
print(df_result[(df_result["Facility"]==3) | (df_result["product"]==4)])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:15:38