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

基于Pandas Groupby按条件创建err_flag特征的技术问询

解决Pandas按ir_id分组生成err_flag的问题

核心思路

先按ir_id分组计算三个关键状态指标,再根据指标组合判断对应的err_flag——其中both_type是type1和type2的交集,需优先判断避免被单独类型覆盖。

实现步骤

1. 构造测试数据(含name5场景)

import pandas as pd

data = pd.DataFrame({
    'ir_id': ['name1', 'name1', 'name2', 'name2', 'name3', 'name3', 'name4', 'name5', 'name5'],
    'pli': [1, None, 2, 3, 4, 5, 6, 7, 8],
    'pli_missing': ['no', 'yes', 'no', 'no', 'yes', 'yes', 'no', 'yes', 'no'],
    'err_type': ['NORMAL', 'UNKNOWN', 'UNKNOWN', 'NORMAL', 'NORMAL', 'NORMAL', 'NORMAL', 'UNKNOWN', 'UNKNOWN']
})

2. 计算分组状态指标

用groupby.transform直接为每行标记所属分组的状态,无需额外合并操作:

# 分组内是否存在err_type=UNKNOWN且pli_missing=yes的行
data['has_unknown_yes'] = data.groupby('ir_id').apply(
    lambda g: ((g['err_type'] == 'UNKNOWN') & (g['pli_missing'] == 'yes')).any()
).transform('first')

# 分组内是否存在err_type=UNKNOWN且pli_missing=no的行
data['has_unknown_no'] = data.groupby('ir_id').apply(
    lambda g: ((g['err_type'] == 'UNKNOWN') & (g['pli_missing'] == 'no')).any()
).transform('first')

# 分组内无UNKNOWN且所有pli_missing都是no
data['no_unknown_all_no'] = data.groupby('ir_id').apply(
    lambda g: (g['err_type'] != 'UNKNOWN').all() & (g['pli_missing'] == 'no').all()
).transform('first')

3. 生成err_flag

按规则优先级判断,优先处理both_type:

def get_err_flag(row):
    if row['has_unknown_yes'] and row['has_unknown_no']:
        return 'both_type'
    elif row['has_unknown_yes']:
        return 'type1'
    elif row['has_unknown_no']:
        return 'type2'
    elif row['no_unknown_all_no']:
        return 'type3'
    else:
        return None  # 处理未覆盖的边缘场景,可自定义标记

data['err_flag'] = data.apply(get_err_flag, axis=1)

4. 查看结果

print(data[['ir_id', 'err_type', 'pli_missing', 'err_flag']])

输出中name5会被正确标记为both_type,符合需求。

关键注意事项

  • 必须基于分组整体状态判断,而非逐行判断,确保err_flag是组级特征的映射。
  • 优先级顺序不可颠倒:both_type需先于type1/type2判断,否则会被单独类型覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:25:24