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

如何用Python/Pandas基于列值标准化LOT_std列?

Pandas实现LOT_std列填充方案

步骤说明与代码实现

  1. 初始化数据:构造与你提供的表格一致的示例DataFrame
  2. 提取目标药物列表:从第一行Regimen中拆分出需要匹配的药物(排除后缀Q21C)
  3. 定义匹配条件:筛选出Line of Therapy (LOT)为maintenance且Regimen包含至少一种目标药物的行
  4. 填充目标值:对符合条件的行,将LOT_std设为第一行的LOT1
import pandas as pd

# 构造原始表格数据
data = {
    'Regimen': ['DrugA + DrugB + DrugC Q21C', 'DrugA', 'DrugA + DrugB', 'DrugA + DrugB + DrugC'],
    'Line of Therapy (LOT)': ['LOT 1', 'maintenance', 'maintenance', 'maintenance'],
    'LOT_std': ['LOT1', '', '', '']
}
df = pd.DataFrame(data)

# 提取第一行中的所有药物(去除Q21C后缀后拆分)
first_regimen_drugs = df.loc[0, 'Regimen'].replace(' Q21C', '').split(' + ')

# 构建筛选条件:LOT为maintenance,且Regimen包含至少一种目标药物
filter_condition = (df['Line of Therapy (LOT)'] == 'maintenance') & \
                   df['Regimen'].apply(lambda x: any(drug in x for drug in first_regimen_drugs))

# 对符合条件的行填充LOT_std值
df.loc[filter_condition, 'LOT_std'] = df.loc[0, 'LOT_std']

# 查看最终结果
print(df)

执行结果

运行代码后得到的表格如下:

RegimenLine of Therapy (LOT)LOT_std
0DrugA + DrugB + DrugC Q21CLOT 1LOT1
1DrugAmaintenanceLOT1
2DrugA + DrugBmaintenanceLOT1
3DrugA + DrugB + DrugCmaintenanceLOT1

扩展说明

如果第一行Regimen的后缀格式有变动(比如不是Q21C),可以调整字符串处理逻辑,比如用空格拆分取前半部分:

first_regimen_drugs = df.loc[0, 'Regimen'].split(' ')[0].split(' + ')

若药物名称存在歧义(比如DrugA和DrugAA),可以改用正则匹配完整药物名,避免误匹配:

import re
def has_target_drug(regimen, drugs):
    for drug in drugs:
        if re.search(rf'\b{drug}\b', regimen):
            return True
    return False

filter_condition = (df['Line of Therapy (LOT)'] == 'maintenance') & \
                   df['Regimen'].apply(lambda x: has_target_drug(x, first_regimen_drugs))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:01:45