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

如何在Pandas DataFrame中统一同药品(不同后缀)的Code值

统一同药品的Code值解决方案

核心思路

先提取药品的基础名称(去掉名称后的数字后缀),再通过映射关系把同一基础名称的Code替换成你想要的统一值,既灵活又能保留原Code的直观性。


方法一:手动指定映射(最推荐,完全按需求控制)

步骤1:提取无后缀的基础药品名称

用正则表达式精准去掉名称末尾的数字和前置空格,适配Ibuprofen 378这类带数字后缀的名称格式:

import pandas as pd

# 替换成你的实际DataFrame
df = pd.DataFrame({
    'Name': ['Ibuprofen 378', 'Ibuprofen 1992', 'Paracetamol 500', 'Paracetamol 1000', 'Aspirin'],
    'Code': ['MOTR', 'ADVL', 'PARA', 'PARX', 'ASPR'],
    'Amount': [10, 20, 15, 5, 8],
    'Seller': ['A', 'B', 'C', 'D', 'E']
})

# 提取基础名称:剔除末尾的数字部分
df['Base_Name'] = df['Name'].str.replace(r'\s+\d+$', '', regex=True)

步骤2:定义映射关系并替换Code

根据需求自定义每个基础名称对应的目标Code,未指定的药品会保留原Code:

# 键是基础名称,值是你要统一的目标Code
code_mapping = {
    'Ibuprofen': 'ADVL',  # 把所有Ibuprofen相关的Code换成ADVL
    'Paracetamol': 'PARA' # 把所有Paracetamol相关的Code换成PARA
}

# 替换Code列,未在映射中的条目保持原Code不变
df['Code'] = df['Base_Name'].map(code_mapping).fillna(df['Code'])

处理后结果示例:

NameCodeAmountSellerBase_Name
Ibuprofen 378ADVL10AIbuprofen
Ibuprofen 1992ADVL20BIbuprofen
Paracetamol 500PARA15CParacetamol
Paracetamol 1000PARA5DParacetamol
AspirinASPR8EAspirin

方法二:自动用组内最常见的Code统一

如果不想手动写映射,可让系统自动把同一药品的Code统一为该组出现次数最多的Code:

# 统计每个基础名称对应的最高频Code
most_common_code = df.groupby('Base_Name')['Code'].agg(lambda x: x.value_counts().idxmax())

# 替换Code列
df['Code'] = df['Base_Name'].map(most_common_code)

方法三:用组内第一个出现的Code统一

直接用每个药品组里第一个出现的Code作为统一值:

# 获取每个基础名称组的第一个Code
first_code = df.groupby('Base_Name')['Code'].first()

# 替换Code列
df['Code'] = df['Base_Name'].map(first_code)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:48:06