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
相关产品推荐
相关产品推荐

