如何在Pandas中对分类序列实现类似Tableau的法院名称分组归类
法院分类实现方案
方案1:关键词规则匹配(推荐,维护成本最低)
你给出的法院名称都有明显的特征关键词,不需要手动整理全量列表,直接用规则匹配即可,性能和可读性都最优。该方法为向量化运算,即使是百万级以上的数据集也能快速完成计算,远优于逐行判断的apply写法:
import pandas as pd import numpy as np # 定义各分类的匹配条件 conditions = [ # 地区法院:名称包含District Court df_combined['Court Name'].str.contains('District Court', case=False), # 郡法院:名称包含County Court df_combined['Court Name'].str.contains('County Court', case=False), # 治安法院:名称以JP开头 df_combined['Court Name'].str.startswith('JP ', na=False) ] # 定义条件对应的分类值 choices = ['District', 'County', 'JP'] # 生成分类列,不满足以上条件的默认归类为Other df_combined['Category'] = np.select(conditions, choices, default='Other')
如果有特殊规则需要调整,比如你想把Probate Court也归到County类,直接在对应条件里加规则即可:
# 调整后的郡法院条件,包含County Court或者Probate Court df_combined['Court Name'].str.contains('County Court|Probate Court', case=False)
方案2:映射字典法(适合有特殊自定义分类规则的场景)
如果你已经整理好了各个分类的法院名称列表,直接构造映射字典再调用map方法即可:
# 你整理好的分类列表示例 district_courts = ['383rd District Court', '388th District Court', ...] county_courts = ['County Court at Law 7', 'County Criminal Court 4', ...] jp_courts = ['JP 6-1', 'JP 6-2', ...] # 构造映射字典 category_map = {} for court in district_courts: category_map[court] = 'District' for court in county_courts: category_map[court] = 'County' for court in jp_courts: category_map[court] = 'JP' # 生成分类列,不在字典里的默认赋值为Other df_combined['Category'] = df_combined['Court Name'].map(category_map).fillna('Other')
结果验证
生成分类列后可以用以下代码验证分类是否正确:
# 查看每个分类对应的法院名称明细,校验是否匹配预期 df_combined.groupby('Category')['Court Name'].unique()
内容的提问来源于stack exchange,提问作者Jacob Meils
相关产品推荐
相关产品推荐

