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

使用df.apply实现区间匹配赋值时触发TypeError错误求助

问题分析与解决

你的代码有三个关键错误导致TypeError:

  1. 列值访问错误:函数里的['Width']是一个列表,不是当前行的Width数值。当apply(axis=1)时,参数x是每行的Series对象,必须用x['Width']来获取当前行的Width值。
  2. 逻辑运算符错误:Python中单个值的多条件逻辑与要用and,&是位运算符,用于数组/Series的批量逻辑判断,直接用会触发类型错误。
  3. 区间边界重复:比如77同时出现在两个条件分支中,会导致匹配优先级问题(比如77会匹配第一个符合的分支,但逻辑上应该明确归属)。

修正后的代码

def f(x):
    width = x['Width']  # 先取出当前行的Width值,简化后续判断
    if width < 66:
        return 'DblStk'
    elif 66 <= width < 77:  # 左闭右开,避免边界重复
        return 'DblStkHC'
    elif 77 <= width < 92:
        return 'RbBase'
    elif 92 <= width <= 94:
        return 'RBBildge'
    elif width > 94:
        return 'StdOnly'
    else:
        return 0

df_filtered['RollCat'] = df_filtered.apply(f, axis=1)

更高效的替代方案(可选)

用pd.cut可以实现更高效的区间匹配,比apply速度快很多,尤其当数据量大时:

import pandas as pd

bins = [-float('inf'), 66, 77, 92, 94, float('inf')]
labels = ['DblStk', 'DblStkHC', 'RbBase', 'RBBildge', 'StdOnly']
df_filtered['RollCat'] = pd.cut(df_filtered['Width'], bins=bins, labels=labels, include_lowest=True)

include_lowest=True确保最小值能被匹配到,完全符合你的区间逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:21:37