You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:基于关键词匹配为费用DataFrame填充分类与子分类

高效实现关键词匹配填充分类

步骤1:准备测试数据

先还原你的示例数据,方便直接运行测试:

import pandas as pd

# 支出数据DataFrame
expense = pd.DataFrame({
    'Date': ['01/01/22', '04/09/22', '01/10/22', '04/11/22'],
    'Libellé': ['CB Darty xxxxxx', 'CB Restau Macdo xxx', 'VIR SALAIRE MOMO xxxx', 'VIR TUTU'],
    'Prix': [100, 10, 10000000, 100],
    'Catégorie': ['?', '?', '?', '?'],
    'Sous-catégorie': ['?', '?', '?', '?']
})

# 关键词-分类映射表DataFrame
keyword_df = pd.DataFrame({
    'Catégorie': ['Courant', 'Courant', 'Pro'],
    'Sous-catégorie': ['Alimentation', 'Loisirs', 'Revenus'],
    'Keyword': ['Macdo, KFC, Burger_King', 'Darty, UGC, Pathé', 'Salaire, Momo']
})

步骤2:预处理关键词表

原映射表一行对应多个关键词,先拆成每行一个关键词,便于后续精准映射:

# 拆分逗号分隔的关键词,每个关键词单独成一行
keyword_df = keyword_df.assign(Keyword=keyword_df['Keyword'].str.split(', ')).explode('Keyword')

处理后keyword_df的结构:

CatégorieSous-catégorieKeyword
CourantAlimentationMacdo
CourantAlimentationKFC
CourantAlimentationBurger_King
CourantLoisirsDarty
CourantLoisirsUGC
CourantLoisirsPathé
ProRevenusSalaire
ProRevenusMomo

步骤3:矢量化匹配填充分类(替代低效循环)

用pandas的矢量化操作批量处理,比Python逐行循环效率高一个数量级:

# 1. 构建关键词到分类、子分类的映射字典
cat_map = keyword_df.set_index('Keyword')['Catégorie'].to_dict()
subcat_map = keyword_df.set_index('Keyword')['Sous-catégorie'].to_dict()

# 2. 构建正则匹配模式(转小写避免大小写不匹配问题)
pattern = '|'.join(keyword_df['Keyword'].str.lower())

# 3. 从支出描述中提取匹配的关键词
expense['matched_keyword'] = expense['Libellé'].str.lower().str.extract(f'({pattern})', expand=False)

# 4. 映射填充分类和子分类,未匹配到的保持原'?'
expense['Catégorie'] = expense['matched_keyword'].map(cat_map).fillna('?')
expense['Sous-catégorie'] = expense['matched_keyword'].map(subcat_map).fillna('?')

# 可选:删除临时生成的匹配关键词列
expense = expense.drop('matched_keyword', axis=1)

最终效果

处理后的expense数据:

DateLibelléPrixCatégorieSous-catégorie
01/01/22CB Darty xxxxxx100CourantLoisirs
04/09/22CB Restau Macdo xxx10CourantAlimentation
01/10/22VIR SALAIRE MOMO xxxx10000000ProRevenus
04/11/22VIR TUTU100??

效率说明

pandas矢量化操作基于numpy底层实现,直接对整列数据批量处理,避免了Python层面逐行循环的开销,数据量越大,效率提升越明显。

内容的提问来源于stack exchange,提问作者user23156049

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 10:52:51