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

如何基于当前值修改Pandas DataFrame的列值?

解决方法

针对你的需求,这里提供两种方案,优先推荐高效矢量化方案(适配4万行的大数据量),另一种是直接复用你现有函数的方案(适合小数据量场景):

方案一:构建反向映射字典(高效,推荐大数据量)

你的lut函数本质是将多个字符串映射到同一个键,先把原有的my_lut转换成值→键的反向字典,再用Pandas的矢量化操作完成映射,比逐行apply快得多,完全适配4万行的规模。

代码示例:

import pandas as pd

df = pd.DataFrame({
    "A": ["Script","Scrpt","MyScript","Sunday","Monday","qwerty"],
    "B": ["Song","Blues","Rock","Classic","Whatever","Something"]})

# 构建反向映射字典,把每个值对应到目标键
my_lut = {"Script" : ["Script","Scrpt","MyScript"],
          "Weekday" : ["Sunday","Monday","Tuesday"]}
reverse_lut = {val: key for key, vals in my_lut.items() for val in vals}

# 完成映射,未匹配的值填充为'Unknown'
df['A'] = df['A'].map(reverse_lut).fillna('Unknown')

print(df)

输出结果与你期望的完全一致:

A          B
0   Script       Song
1   Script      Blues
2   Script       Rock
3  Weekday    Classic
4  Weekday   Whatever
5  Unknown  Something

方案二:直接使用apply方法(简单但效率低)

如果你想直接复用现有的lut函数,可以用apply逐行处理,但注意4万行数据下效率会远低于方案一,仅适合小数据量测试:

代码示例:

import pandas as pd

df = pd.DataFrame({
    "A": ["Script","Scrpt","MyScript","Sunday","Monday","qwerty"],
    "B": ["Song","Blues","Rock","Classic","Whatever","Something"]})

def lut(txt):
    my_lut = {"Script" : ["Script","Scrpt","MyScript"],
            "Weekday" : ["Sunday","Monday","Tuesday"]}

    for key, value in my_lut.items():
        if txt in value:
            return(key)
    return('Unknown')

# 将函数应用到A列
df['A'] = df['A'].apply(lut)

print(df)

同样能得到你期望的输出,但大数据量场景下不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:25:17