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

如何用循环生成的新Severity值替换DataFrame对应列旧值?

替换DataFrame中Severity列的两种方法

你的现有代码里severity_levels函数只计算了每个CVSS对应的新Severity值,但没有把值写回DataFrame的Severity列,下面是两种可行的修改方案:

方案一:改进原有循环逻辑

直接遍历DataFrame的每一行,计算新值后覆盖原Severity列:

def severity_levels(df):
    for idx, row in df.iterrows():
        cvss = float(row['CVSS'])
        if cvss < 4.0:
            s = "Low"
        elif 4.0 <= cvss < 7.0:
            s = "Moderate"
        else:
            s = "High"
        # 通过索引将新值写入对应行的Severity列
        df.loc[idx, 'Severity'] = s

这种方法和你原来的循环思路一致,但需要注意:iterrows在数据量较大时效率较低,适合小数据集使用。

方案二:使用Pandas向量化操作(推荐)

Pandas的向量化操作比循环高效得多,适合大规模数据集,这里提供两种实现方式:

方式1:嵌套np.where

import numpy as np

def severity_levels(df):
    df['Severity'] = np.where(
        df['CVSS'] >= 7.0,
        'High',
        np.where(
            df['CVSS'] >= 4.0,
            'Moderate',
            'Low'
        )
    )

方式2:pd.cut区间划分

如果需要更清晰的区间定义,可以用pd.cut:

def severity_levels(df):
    # 定义CVSS区间和对应的标签
    bins = [-float('inf'), 4.0, 7.0, float('inf')]
    labels = ['Low', 'Moderate', 'High']
    # 按区间划分并替换Severity列
    df['Severity'] = pd.cut(df['CVSS'], bins=bins, labels=labels, include_lowest=True)

两种向量化方法都会直接覆盖原Severity列的所有值,无需手动循环,执行效率远高于逐行遍历。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:50:35