如何将DataFrame中severity列的字典转为值为列名的指定结构DataFrame
问题描述
现有一个DataFrame,其中severity列存储着字典数据,示例字典如下:
{'BLOCKER': 'F', 'CRITICAL': 'E', 'MAJOR': 'D', 'MINOR': 'B', 'NO RISK': 'A'}
需要将其转换为目标结构的DataFrame:
- 目标列名为
A、B、C、D、E、F - 各列对应的行值依次为
NO RISK、MINOR、NA、MAJOR、CRITICAL、BLOCKER - 原字典的键需对应到以其值为列名的位置,无匹配的列填充
NA
解决方案
要实现这个转换,按以下步骤操作:
- 反转字典映射:把原字典的键值对反转,变成
{值: 键}的形式,这样就能直接通过列名找到对应的风险等级。 - 匹配目标列:按目标列的顺序,用反转后的字典匹配对应的值,找不到匹配项的列填充
NA。 - 生成目标DataFrame:将匹配后的结果转换成指定格式的DataFrame。
代码实现
import pandas as pd # 构造示例原始DataFrame df = pd.DataFrame({ 'severity': [{'BLOCKER': 'F', 'CRITICAL': 'E', 'MAJOR': 'D', 'MINOR': 'B', 'NO RISK': 'A'}] }) # 定义目标列的固定顺序 target_cols = ['A', 'B', 'C', 'D', 'E', 'F'] # 处理每行的severity字典 def process_severity(severity_dict): # 反转字典,让值作为键,原风险等级作为对应值 reversed_map = {v: k for k, v in severity_dict.items()} # 按目标列顺序生成对应内容,无匹配则填'NA' return [reversed_map.get(col, 'NA') for col in target_cols] # 应用转换并生成目标DataFrame result_df = pd.DataFrame(df['severity'].apply(process_severity).tolist(), columns=target_cols) # 输出结果 print(result_df)
运行结果
A B C D E F 0 NO RISK MINOR NA MAJOR CRITICAL BLOCKER
内容的提问来源于stack exchange,提问作者begadali
相关产品推荐
相关产品推荐

