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

如何使用np.select根据前缀匹配填充pandas DataFrame的category字段

解决方案

方法1:直接转换已有的条件字符串列表

如果你的条件字符串是自行生成、无外部注入风险,可以直接用pd.eval批量转换:

# 假设你的条件字符串列表名为cond_str_list
cond_list = [pd.eval(cond_str) for cond_str in cond_str_list]
# 对应值列表取keyword_df中的category列即可
value_list = keyword_df['category'].tolist()

# 计算匹配结果,仅填充空分类行
main_df['category'] = main_df['category'].fillna(
    pd.Series(np.select(cond_list, value_list, default=0), index=main_df.index)
)

方法2(更推荐):直接生成布尔条件列表,避免字符串转换

不需要先生成字符串,直接遍历keyword_df构造条件,稳定性更高、没有执行任意代码的风险:

import pandas as pd
import numpy as np

cond_list = []
value_list = []
# 遍历前缀-分类映射表构造条件
for keyword, category in zip(keyword_df['keyword'], keyword_df['category']):
    # 仅匹配category为空、且description符合前缀的行
    cond = main_df['category'].isnull() & main_df['description'].str.startswith(keyword)
    cond_list.append(cond)
    value_list.append(category)

# 生成匹配结果
match_result = np.select(cond_list, value_list, default=0)
# 仅填充原有category为空的行,保留原有非空值
main_df['category'] = main_df['category'].fillna(match_result)

注意事项

  • 如果存在多个前缀同时匹配同一行的情况,np.select会按条件列表的顺序返回第一个匹配的分类,有优先级需求可以提前给keyword_df按优先级排序即可。
  • 如果需要忽略大小写匹配,可以将str.startswith的前后字符串统一转为小写/大写再判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:45:03