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

编写Python优先级合并函数遇问题,求处理重复公司疫苗状态数据

问题描述

现有一个包含10000行的数据集,格式如下:

Company_Names     Vaccine_status

Zebraniac au       Done
Zebraniac au       Not Done
Alons gm           In Progress
Endeven Tc         Not Done
Endeven Tc         No Info

需要编写Python函数对存在重复公司名称的行进行合并:仅保留优先级最高的Vaccine_status记录,优先级顺序为 Done > Not Done > No Info > In Progress。例如Zebraniac au仅保留Done状态的行,删除Not Done状态的行。要求输入数据集后返回合并后的数据集。

解决方案

实现思路

  • 定义状态优先级映射:用字典给每个状态分配权重,优先级越高的权重值越小,确保排序时高优先级状态排在前面。
  • 按公司名称分组,每组内按状态优先级排序,取排序后的第一条记录即优先级最高的记录。
  • 整理结果,移除临时权重列后返回。

Python 函数实现

假设输入数据集为pandas.DataFrame类型,代码如下:

import pandas as pd

def merge_company_vaccine_status(df):
    # 定义状态优先级:权重越小优先级越高
    status_priority = {
        'Done': 0,
        'Not Done': 1,
        'No Info': 2,
        'In Progress': 3
    }
    # 添加优先级权重列
    df['priority'] = df['Vaccine_status'].map(status_priority)
    # 按公司分组,每组内按优先级升序排序,取第一条记录
    merged_df = df.sort_values(['Company_Names', 'priority']).groupby('Company_Names').first().reset_index()
    # 移除临时列,保留目标字段
    merged_df = merged_df[['Company_Names', 'Vaccine_status']]
    return merged_df

代码说明

  • status_priority字典完成状态到权重的映射,保证高优先级状态在排序时更靠前。
  • 新增priority列后,通过sort_values实现先按公司名称分组、再按优先级排序的逻辑。
  • groupby('Company_Names').first()提取每组优先级最高的记录,最后重置索引并清理临时列,得到最终合并结果。

使用示例

# 构造示例数据集
data = {
    'Company_Names': ['Zebraniac au', 'Zebraniac au', 'Alons gm', 'Endeven Tc', 'Endeven Tc'],
    'Vaccine_status': ['Done', 'Not Done', 'In Progress', 'Not Done', 'No Info']
}
df = pd.DataFrame(data)

# 调用函数
result_df = merge_company_vaccine_status(df)
print(result_df)

输出结果:

Company_Names Vaccine_status
0      Alons gm    In Progress
1    Endeven Tc       Not Done
2  Zebraniac au           Done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:22:54