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

Pandas嵌套IF生成Mark列遇异常:Duration=10.0时返回None求解决

问题原因分析

你遇到的10.0对应Mark为None的问题,是因为条件判断漏掉了等于10的情况:
当Duration(Mins)等于10.0时,它既不满足<10的条件,也不满足>10的条件,函数没有进入任何一个返回分支,因此默认返回None。

修复方案

方案1:修改判断逻辑

调整mark函数的最后一个条件,把>改为>=,或者单独添加等于10的分支:

import pandas as pd

data = {
    'Alarm Name': ['Cell Down', '4G Down', '3G Down', '2G Down', 'Cell Unavailable', 'Partial Down', 'Signalling Down'],
    'Duration(Mins)': [3, 5.9, 10.1, 2.9, -12, 6, 10]
}

df = pd.DataFrame(data)

def mark(row):
    if row['Duration(Mins)'] >= 0:
        if row['Duration(Mins)'] < 3:
            return '0-3 Mins'
        elif row['Duration(Mins)'] < 6:
            return '3-6 Mins'
        elif row['Duration(Mins)'] < 10:
            return '6-10 Mins'
        elif row['Duration(Mins)'] >= 10:  # 修正此处条件
            return '>10 Mins'
    else:
        return 'Open'

df['Mark'] = df.apply(mark, axis=1)

方案2:用Pandas原生函数pd.cut更高效

apply方法处理大型数据集时效率偏低,推荐用Pandas内置的pd.cut函数直接实现分箱逻辑,代码更简洁且性能更好:

import pandas as pd

data = {
    'Alarm Name': ['Cell Down', '4G Down', '3G Down', '2G Down', 'Cell Unavailable', 'Partial Down', 'Signalling Down'],
    'Duration(Mins)': [3, 5.9, 10.1, 2.9, -12, 6, 10]
}

df = pd.DataFrame(data)

# 定义分箱边界和对应标签
bins = [-float('inf'), 0, 3, 6, 10, float('inf')]
labels = ['Open', '0-3 Mins', '3-6 Mins', '6-10 Mins', '>10 Mins']

# 使用cut生成Mark列
df['Mark'] = pd.cut(df['Duration(Mins)'], bins=bins, labels=labels, include_lowest=True)

这样处理后,10.0会被分到>10 Mins区间,负数自动对应Open,完全无需嵌套if逻辑。

内容的提问来源于stack exchange,提问作者Bihaqi Al Rafik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:05:12