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

Pandas按指定列条件填充另一列值,自定义函数运行无结果问题求助

问题修复方案

原有代码错误原因

  • 核心语法错误:给Main Product Family列赋值时误写了双等号==,这是相等判断运算符,不会实际修改列的取值,是填充失败的直接原因
  • 逻辑不完整:没有优先判断product group列是否存在有效值,不符合需求的优先级规则
  • 性能缺陷:Pandas逐行遍历的实现效率极低,数据量超过1万行时会有明显的性能问题,更推荐使用向量化操作实现

最优实现方案(向量化操作,无需自定义函数)

  1. 首先将product group的有效值直接映射到Main Product Family列,非有效值位置置为NaN
import pandas as pd
# 空值判定同时覆盖NaN和空字符串两种场景
df['Main Product Family'] = df['product group'].where(
    df['product group'].notna() & (df['product group'] != '')
)
  1. 定义Record Type到产品族的映射字典,后续新增映射规则直接修改字典即可
record_type_map = {
    'bte-pmx': 'PMX',
    'bt_us-FM': 'GTRate'
}
  1. 对Main Product Family的空值行,通过映射关系填充
df['Main Product Family'] = df['Main Product Family'].fillna(
    df['Record Type'].map(record_type_map)
)

原有自定义函数修正版

如果你需要保留自定义函数的实现方式,修正后的代码如下:

def func(x):
    for i in range(0,len(x)):
        # 优先判断product group是否有有效值
        if pd.notna(x.iloc[i,0]) and x.iloc[i,0] != '':
            x.iloc[i,3] = x.iloc[i,0]
        else:
            if x.iloc[i,2] == 'bte-pmx':
                # 把双等号改为单等号实现赋值
                x.iloc[i,3] = 'PMX'
    return x

# 调用函数后需要重新赋值给原DataFrame
df = func(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:57:02