首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有一个for循环,它从一个DF列生成一个新值,但是如何用该新值替换另一列中的另一个值?

我有一个for循环,它从一个DF列生成一个新值,但是如何用该新值替换另一列中的另一个值?
EN

Stack Overflow用户
提问于 2022-10-14 18:05:59
回答 1查看 37关注 0票数 0

下面是我的DataFrame的一个例子

代码语言:javascript
复制
               CVE ID  Vulnerability ID  Severity          Fix Status  CVSS
0        ALPINE-13661                46       low  fixed in 1.32.1-r8   0.0
1       CVE-2012-5784                47  moderate                open   4.0
2       CVE-2013-0169               411       low                None   2.6
3       CVE-2014-0429               411  critical                None  10.0
4       CVE-2014-0432               411  critical                None   9.3
..                ...               ...       ...                 ...   ...
622  PRISMA-2022-0049                49      high      fixed in 2.0.1   8.0
623  PRISMA-2022-0168               410      high                open   7.8
624  PRISMA-2022-0227               416      high                open   7.5
625  PRISMA-2022-0239                47      high      fixed in 4.9.2   7.5
626  PRISMA-2022-0270               416    medium                open   5.4

目前,我有一个for循环,循环遍历CVSS列,并生成一个新的‘严重性’值,称为‘s(新值将是"Low“、”中度“或"High")。如何用‘s的新值替换“严重性”列中的旧值

Main.py

代码语言:javascript
复制
def main():
    dataframe = csv_to_df()
    severity_levels(dataframe)

def csv_to_df():
    input_csv = pd.read_csv(f"{input_csv_filename}.csv")

    unique_df = input_csv.drop_duplicates(subset=["CVE ID", "ID"]).groupby("CVE ID", as_index=False).agg(dict.fromkeys(input_csv.columns, "first") | {"ID": ", ".join})

    df = unique_df[['CVE ID', 'Vulnerability ID', 'Severity', 'Fix Status', 'CVSS']] 
    return df

def severity_levels(df):
    for cvssv3 in df[['CVSS']].values:
        cvss = float(cvssv3)
        if cvss < 4.0:
            s = "Low"
        elif cvss >= 4 and cvss < 7:
            s = "Moderate"
        else:
            s = "High"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-14 18:14:31

避免在熊猫圈。如果可以的话,可以使用矢量化函数:

代码语言:javascript
复制
def main():
    dataframe = csv_to_df()
    df["Severity"] = pd.cut(df["CVSS"], [-np.inf, 4, 7, np.inf], labels=["Low", "Moderate", "High"])

pd.cut将根据您的bin范围分配标签:

代码语言:javascript
复制
[-np.inf, 4) -> Low
[4, 7)       -> Moderate
[7, np.inf)  -> High
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74073207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档