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

如何按多字段分组规则为数据集inspection字段分条件赋值

基于Pandas的分组赋值实现方案

你可以直接通过pandas的分组apply能力完成全量数据的inspection字段赋值,无需提前拆分2元素、3元素的单独文件,代码会自动按组匹配规则。

步骤1:导入依赖读入数据

import pandas as pd
import numpy as np

# 替换为你的实际数据路径,支持csv、excel等格式
df = pd.read_csv("your_dataset.csv")

步骤2:运行分组赋值逻辑

将以下自定义函数传入分组apply方法即可完成批量赋值:

def fill_inspection(group_df: pd.DataFrame) -> pd.DataFrame:
    group_df = group_df.reset_index(drop=True)
    group_size = len(group_df)
    group_df["inspection"] = pd.NA
    result_values = group_df["result"].tolist()

    # 处理单组2条记录的场景
    if group_size == 2:
        if set(result_values) == {1, 4}:
            group_df.loc[group_df["result"] == 4, "inspection"] = 1
            group_df.loc[group_df["result"] == 1, "inspection"] = 2
        elif set(result_values) == {1, 3}:
            group_df.loc[group_df["result"] == 3, "inspection"] = 1
            group_df.loc[group_df["result"] == 1, "inspection"] = 2
        elif all(v == 1 for v in result_values):
            # 默认取组内第一条赋值1,第二条赋值2,需要随机选择可替换为下方注释代码
            group_df.loc[0, "inspection"] = 1
            group_df.loc[1, "inspection"] = 2
            # 随机选择版本:
            # rand_pos = np.random.randint(0,2)
            # group_df.loc[rand_pos, "inspection"] = 1
            # group_df.loc[group_df["inspection"].isna(), "inspection"] = 2

    # 处理单组3条记录的场景
    elif group_size == 3:
        count_1 = result_values.count(1)
        if count_1 == 1:
            # 所有result=1的记录固定赋值2
            group_df.loc[group_df["result"] == 1, "inspection"] = 2
            # result=0的记录固定赋值0
            group_df.loc[group_df["result"] == 0, "inspection"] = 0
            # result=4的记录按出现顺序,第一条赋值1,其余赋值0
            res4_pos = group_df[group_df["result"] ==4].index
            for i, pos in enumerate(res4_pos):
                group_df.loc[pos, "inspection"] = 1 if i ==0 else 0
        elif all(v ==1 for v in result_values):
            # 默认取组内第一条赋值1,其余赋值2,需要随机选择可替换为下方注释代码
            group_df.loc[0, "inspection"] =1
            group_df.loc[1:, "inspection"] =2
            # 随机选择版本:
            # rand_pos = np.random.randint(0,3)
            # group_df.loc[rand_pos, "inspection"] = 1
            # group_df.loc[group_df["inspection"].isna(), "inspection"] = 2

    group_df["inspection"] = group_df["inspection"].astype(int)
    return group_df

# 按指定维度分组批量应用规则
df = df.groupby(
    ["Code", "Area", "Floor", "Box"],
    group_keys=False
).apply(fill_inspection)

注意事项

  • 代码默认在全result=1的场景取组内第一条记录赋值1,代码中已经附了随机选择的替换代码,按需打开注释即可
  • 3元素组的逻辑已经同时覆盖「两条result=4」「一条result=4+一条result=0」两种场景,不需要单独写分支判断
  • 如果后续出现其他result值组合的场景,直接在对应组大小的分支下补充判断逻辑即可
  • 赋值完成后可以通过df.groupby(["Code", "Area", "Floor", "Box"]).size()校验每组的大小和赋值结果是否符合预期

内容的提问来源于stack exchange,提问作者Jesús Asdrúbal Molina Víquez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:36:27