DataFrame相似变速箱名称分组异常:如何实现同类统一聚合?
解决DataFrame相似字符串分组不合并的问题
出现这类问题的核心原因是相似字符串存在细微格式差异(比如大小写、空格、连字符、拼写变体),导致groupby无法识别为同一分组。以下是几种针对性的解决方法:
方法1:统一字符串基础格式
先对Transmission列做标准化清洗,消除大小写、空格、特殊符号的差异:
# 清洗列:转小写+去首尾空格+替换连字符为空格 Cardata['Transmission_clean'] = Cardata['Transmission'].str.lower()\ .str.strip()\ .str.replace('-', ' ') # 基于清洗后的列分组聚合 CardataTransmissions = Cardata.groupby(["Transmission_clean"]).agg(Totalsales=('number', 'sum'))
方法2:自定义映射统一变体
如果存在明确的拼写/格式变体(比如"Semi-Auto"、"semiauto"这类),直接用映射字典将所有变体映射到统一名称:
# 定义映射字典,根据实际数据补充所有相似变体 trans_mapping = { 'semi-auto': 'Semi Auto', 'semiauto': 'Semi Auto', 'Semi-Auto': 'Semi Auto', 'semi auto': 'Semi Auto' } # 先转小写匹配映射,未匹配到的保留原内容 Cardata['Transmission_clean'] = Cardata['Transmission'].str.lower().map(trans_mapping).fillna(Cardata['Transmission']) # 执行分组聚合 CardataTransmissions = Cardata.groupby(["Transmission_clean"]).agg(Totalsales=('number', 'sum'))
方法3:模糊匹配批量合并变体
如果变体较多且不确定所有格式,可以用模糊匹配工具自动识别相似字符串:
- 先安装依赖库:
pip install fuzzywuzzy python-Levenshtein - 执行以下代码:
from fuzzywuzzy import process # 获取所有唯一的变速箱类型 unique_trans = Cardata['Transmission'].unique() # 设定基准类别(比如以"Semi Auto"为标准) base_category = "Semi Auto" # 筛选出与基准相似度≥80的变体(阈值可根据需求调整) similar_variants = [item for item in unique_trans if process.extractOne(item, [base_category])[1] >= 80] # 将所有相似变体替换为基准类别 Cardata['Transmission_clean'] = Cardata['Transmission'].replace(similar_variants, base_category) # 分组聚合 CardataTransmissions = Cardata.groupby(["Transmission_clean"]).agg(Totalsales=('number', 'sum'))
前置检查建议
先查看所有唯一值,明确差异类型,方便选择最适合的方法:
print(Cardata['Transmission'].unique())
内容的提问来源于stack exchange,提问作者DavidJohnZ
相关产品推荐
相关产品推荐

