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

如何根据条件对DataFrame的一列应用两个不同的函数?

问题解决

错误原因分析

你的代码出现两个核心问题:

  1. 条件判断错误:在lambda中使用df['Category'] == 'vegetable'是在判断整个Category列是否等于vegetable,返回的是一个布尔值Series,而非当前行的单个布尔值,这会导致"真值模糊"的报错。
  2. 函数语法错误:fruit_pro函数中RegexpTokenizer("[\w+.]+")后面多了一个逗号,导致reg_tokenizer变成了元组而非Tokenizer对象,后续调用tokenize方法会失败。

修正后的代码

第一步:修复函数定义

from nltk.tokenize import RegexpTokenizer

def veg_pro(text):
    reg_tokenizer = RegexpTokenizer('\s+', gaps=True)
    terms = reg_tokenizer.tokenize(text) 
    return terms

def fruit_pro(text):
    # 移除了多余的逗号
    reg_tokenizer = RegexpTokenizer("[\w+.]+")
    terms = reg_tokenizer.tokenize(text) 
    return terms

第二步:按行应用条件函数

使用df.apply(axis=1)来遍历每一行,同时获取当前行的Produce和Category值:

import pandas as pd

# 构造示例DataFrame
data = {
    'Produce': ['apple is good', 'corn is bad', 'beans is good', 'grape if good'],
    'Category': ['fruit', 'vegetable', 'vegetable', 'fruit']
}
df = pd.DataFrame(data)

# 按条件应用函数
df['processed_produce'] = df.apply(
    lambda row: veg_pro(row['Produce']) if row['Category'] == 'vegetable' else fruit_pro(row['Produce']),
    axis=1
)

输出结果

执行后df会新增processed_produce列,内容如下:

ProduceCategoryprocessed_produce
apple is goodfruit['apple', 'is', 'good']
corn is badvegetable['corn', 'is', 'bad']
beans is goodvegetable['beans', 'is', 'good']
grape if goodfruit['grape', 'if', 'good']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:25:23