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

Python pandas如何按Bugs列复制行并转换Bug分级列值为0/1

Pandas实现方案

以下是可直接运行的实现代码,逻辑清晰易修改:

步骤1:导入依赖并构造数据集

import pandas as pd

# 此处为示例数据集,你也可以用pd.read_csv、pd.read_excel读取本地文件
data = [
    ["Class1", 4, 0, 1, 3, 34, 77],
    ["Class2", 0, 0, 0, 0, 9, 45],
    ["Class3", 3, 0, 1, 2, 10, 18],
    ["Class4", 0, 0, 0, 0, 44, 46],
    ["Class5", 6, 2, 2, 2, 78, 94]
]
df = pd.DataFrame(data, columns=["ClassName", "Bugs", "HighBugs", "LowBugs", "NormalBugs", "WMC", "LOC"])

步骤2:执行拆分逻辑

result = []
for _, row in df.iterrows():
    # Bugs为0的行直接保留无需处理
    if row["Bugs"] == 0:
        result.append(row.to_frame().T)
        continue
    
    # 拆分高危bug行
    if row["HighBugs"] > 0:
        high_part = pd.DataFrame([row]*row["HighBugs"])
        high_part["Bugs"] = 1
        high_part["HighBugs"] = 1
        high_part[["LowBugs", "NormalBugs"]] = 0
        result.append(high_part)
    
    # 拆分低危bug行
    if row["LowBugs"] > 0:
        low_part = pd.DataFrame([row]*row["LowBugs"])
        low_part["Bugs"] = 1
        low_part["LowBugs"] = 1
        low_part[["HighBugs", "NormalBugs"]] = 0
        result.append(low_part)
    
    # 拆分普通bug行
    if row["NormalBugs"] > 0:
        normal_part = pd.DataFrame([row]*row["NormalBugs"])
        normal_part["Bugs"] = 1
        normal_part["NormalBugs"] = 1
        normal_part[["HighBugs", "LowBugs"]] = 0
        result.append(normal_part)

# 合并所有结果并重置索引
final_df = pd.concat(result).reset_index(drop=True)

步骤3:验证结果

print(final_df)

输出结果和你要求的预期格式完全一致,ClassName、WMC、LOC三个字段均保留原值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:36:03