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

Pandas中基于列表和另一列条件替换逗号分隔列的对应值

实现方案

首先我们先从Names列提取命中my_list的关键词,再用命中的关键词替换IDs列逗号分隔的第一个元素即可,完整可运行代码如下:

import pandas as pd
import numpy as np

df = pd.DataFrame({'IDs':['d,f,o','d,f','d,f,o','d,f','d,f'],
                'Names':['APPLE ABCD ONE','date ABCD','NO foo YES','ORANGE AVAILABLE','TEA AVAILABLE']})

my_list = ['APPLE', 'ORANGE', 'LEMONS', 'STRAWBERRY', 'BLUEBERRY']

# 构造正则匹配规则,匹配my_list中的所有元素
match_pattern = '|'.join(my_list)
# 提取每行Names中命中的关键词,无命中则返回NaN
df['matched'] = df['Names'].str.extract(f'({match_pattern})', expand=False)
# 按行处理替换IDs
df['IDs'] = df.apply(
    lambda row: ','.join([row['matched']] + row['IDs'].split(',')[1:]) 
    if pd.notna(row['matched']) 
    else row['IDs'],
    axis=1
)

# 查看结果
print(df['IDs'].tolist())
# 输出:['APPLE,f,o', 'd,f', 'd,f,o', 'ORANGE,f', 'd,f']

逻辑说明

  • 用str.extract配合正则批量提取命中关键词,比循环判断any的写法效率更高,同时可以直接拿到命中的具体值,不需要额外遍历查找
  • 替换逻辑:将原IDs按逗号拆分为列表,把第一个元素替换为命中的关键词,再用逗号拼接回字符串,无命中的行直接保留原IDs值
  • 如果不需要保留中间的matched列,处理完成后可以用df.drop('matched', axis=1, inplace=True)删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:24:02