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

如何在Pandas中基于布尔列值对指定行的列应用函数?

解决方法

你的代码问题在于lambda里引用了整个df["spelling"]列,而不是当前行的布尔值,导致条件判断逻辑错误。同时全量apply确实会浪费资源,下面是两种高效的解决方案,只处理spelling为False的行:

方案1:使用loc定位目标行(推荐)

先把new_name初始化为name的副本,再仅对需要修正的行应用函数:

import difflib
import pandas as pd

# 初始化新列为原name列的拷贝
df["new_name"] = df["name"].copy()

# 生成需要修正的行的掩码
mask = df["spelling"] == False

# 仅对掩码匹配的行应用拼写修正逻辑
df.loc[mask, "new_name"] = df.loc[mask, "name"].apply(
    lambda x: difflib.get_close_matches(x, correction)[0] if difflib.get_close_matches(x, correction) else x
)

注意:加入了if difflib.get_close_matches(x, correction)的判断,避免当没有匹配结果时触发索引越界错误。

方案2:使用numpy.where简化代码

用numpy的条件判断函数一次性完成赋值,逻辑更紧凑:

import difflib
import pandas as pd
import numpy as np

df["new_name"] = np.where(
    df["spelling"],  # 条件:spelling为True时
    df["name"],      # 直接保留原name
    # spelling为False时应用修正函数
    df["name"].apply(lambda x: difflib.get_close_matches(x, correction)[0] if difflib.get_close_matches(x, correction) else x)
)

大数据量额外优化

如果correction列表非常大,difflib.get_close_matches的效率可能不足,可以考虑使用更高效的字符串匹配库(比如fuzzywuzzy的process.extractOne),或者将correction预处理为合适的数据结构(比如倒排索引)来加速匹配。

内容的提问来源于stack exchange,提问作者Marcus K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:32:37