Pandas中基于映射规则新增列将列值归类到预设分组的高效实现方法
Pandas高效实现拒因分组的实现方案
核心思路是把你现有需要反查的映射字典预处理为正向查找字典,配合Pandas原生向量化操作实现百万级数据秒级处理,无额外计算开销。
步骤1:构造正向查找字典
你现有结构为{分组名: [对应原取值列表]}的映射字典,只需做一次字典推导式翻转,得到{原取值: 对应分组名}的查找表,预处理复杂度为O(n),n为所有原取值的总个数,消耗完全可以忽略:
# 你的原始分组规则 group_rule = { "financial": ["invalid insurance", "not enough money"], "patient problems": ["behavior issues", "anger issues"], "occupancy": ["no space in hospital"] # 剩余分组规则自行补充 } # 翻转得到正向查找表 lookup_dict = {reason: group for group, reason_list in group_rule.items() for reason in reason_list}
步骤2:向量化生成新列
直接用Pandas自带的map方法匹配取值,该操作为底层C实现的向量化运算,远快于Python层的循环、apply等操作,就算是千万级数据集也能快速完成:
# 生成归类后的新列 df["reason_for_rejection_grouped"] = df["reason_for_rejection"].map(lookup_dict) # 可选:如果存在未匹配到的拒因,统一填充为other(可根据你的需求自定义默认分组) df["reason_for_rejection_grouped"] = df["reason_for_rejection_grouped"].fillna("other")
效果验证
拿你提供的样例数据运行后,输出结果和预期完全一致:
| ID | reason_for_rejection | reason_for_rejection_grouped |
|---|---|---|
| 1 | invalid insurance | financial |
| 2 | behavior issues | patient problems |
| 3 | not enough money | financial |
| 4 | no space in hospital | occupancy |
| 5 | anger issues | patient problems |
内容的提问来源于stack exchange,提问作者Scorks
相关产品推荐
相关产品推荐

