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

Pandas自定义函数映射列值异常:新列仅返回0.131问题排查

问题原因及解决方法

原因分析

你调用construct(merged_df['Tower'])时,传入的是整个Pandas Series(即'Tower'列的所有数据),而非逐行的单个元素。函数内部的for i in x会遍历这个Series的元素,一旦遇到第一个匹配"Orion"的元素,函数就直接返回0.131并终止执行。最后将这个单一值赋值给新列时,Pandas会自动把该值广播到整个列,导致所有行都显示0.131。

正确实现方式

方式1:用apply逐元素处理

修改函数调用逻辑,让construct函数接收单个元素而非整个Series:

def construct(tower_name):
    if tower_name == "Orion":
        return 0.131
    elif tower_name == "Omega":
        return 0.148
    elif tower_name == "Oyster":
        return 0.106
    elif tower_name == "Skyraa":
        return 0
    # 可选:添加未匹配值的默认返回
    return None

merged_df['Tower construct %'] = merged_df['Tower'].apply(construct)

方式2:用map配合字典(更高效)

Pandas推荐使用字典映射的方式完成这类值转换,性能比apply更好:

tower_mapping = {
    "Orion": 0.131,
    "Omega": 0.148,
    "Oyster": 0.106,
    "Skyraa": 0
}

merged_df['Tower construct %'] = merged_df['Tower'].map(tower_mapping)
# 若需处理未匹配的Tower名称,可添加fillna:
# merged_df['Tower construct %'] = merged_df['Tower'].map(tower_mapping).fillna(0)  # 或其他默认值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:32:46