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

将Python数据处理代码封装为方法,生成multiple_instance标识列

封装代码为可复用方法实现多实例标记

完整封装方法

下面是针对需求封装好的可复用方法,支持自定义目标Code列表,同时保留原DataFrame的所有列:

import pandas as pd
import numpy as np

def add_multiple_instance_column(df, multiple_instance_codes=['A','B','C','D'], 
                                 id_col='Id', code_col='Code', bill_id_col='bill_id'):
    # 1. 筛选符合目标Code的行(忽略大小写、空值)
    pattern = '|'.join(multiple_instance_codes)
    filt = df[code_col].str.contains(pattern, na=False, case=False)
    df_mul = df[filt].copy()  # 避免修改原数据
    
    if df_mul.empty:
        # 无匹配行时直接全设为0
        df['multiple_instance'] = 0
        return df
    
    # 2. 按Id分组统计出现次数
    df_temp = df_mul.groupby([id_col])[[code_col]].size().reset_index(name='count')
    
    # 3. 将统计结果合并回筛选后的数据集
    df_mul = df_mul.merge(df_temp, on=id_col, how='left')
    
    # 4. 按bill_id计算累积和
    df_mul['Cumulative_Sum'] = df_mul.groupby([bill_id_col])['count'].cumsum()
    
    # 5. 生成multiple_instance标记列
    df_mul['multiple_instance'] = np.where(df_mul['Cumulative_Sum'] > 1, 1, 0)
    
    # 6. 将标记列合并回原DataFrame,未匹配行设为0
    df = df.merge(df_mul[[id_col, bill_id_col, 'multiple_instance']], 
                  on=[id_col, bill_id_col], how='left').fillna({'multiple_instance': 0})
    
    return df

方法说明

  • 参数说明:
    • df:输入的原始DataFrame(包含30列数据)
    • multiple_instance_codes:自定义的目标Code列表,默认值为['A','B','C','D']
    • id_col/code_col/bill_id_col:对应数据中的列名,默认匹配你提到的Id/Code/bill_id,列名不同可自行修改
  • 核心逻辑:
    1. 筛选出Code属于目标列表的行
    2. 按Id统计每个Id的出现次数
    3. 按bill_id分组计算累积次数,累积次数大于1时标记为1,否则为0
    4. 将标记结果合并回原DataFrame,确保所有30列保留,未匹配行标记为0

调用示例

# 假设原始数据存储在df中
df = pd.read_csv('your_dataset.csv')

# 使用默认Code列表调用
result_df = add_multiple_instance_column(df)

# 自定义Code列表调用
custom_codes = ['X', 'Y', 'Z']
result_df = add_multiple_instance_column(df, multiple_instance_codes=custom_codes)

# 列名不同时的调用(比如Id列叫user_id)
result_df = add_multiple_instance_column(df, id_col='user_id')

验证结果

以你提供的示例数据为例,调用方法后会生成符合预期的multiple_instance列,同时保留原数据的所有列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:50:24