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

Python中如何将字符串列表与DataFrame进行匹配?

Match Transaction Descriptions to Category Variables

首先,我来帮你实现需求:把交易描述列表中的每个字符串,和DataFrame里的关键词做匹配,返回对应的分类变量(只要DataFrame的value列里有任意单词出现在交易字符串中,就返回对应的variable)。

第一步:准备可运行的数据

先把你提供的原始数据转换成Python可以直接使用的格式:

import pandas as pd

# 你的交易描述列表
listvalue = [
    "POS 541919XXXXXX5316 WWW PAYTM COM POS DEBIT",
    "POS 541919XXXXXX5316 HASBRO CLOTHING POS DEBIT",
    "Salary for the month of April 2018"
]

# 构造分类映射的DataFrame(根据你提供的内容整理)
category_data = [
    ["ATM", "Cash withdrawal"],
    ["Auto & Fuel", "fuel"],
    ["Expense", "fees"],
    ["Expense", "goods"],
    ["Expense", "stationery"],
    ["Expense", "purchase"],
    ["Expense", "material"],
    ["Expense", "telephone"],
    ["Food/Restaurent", "food"],
    ["Food/Restaurent", "catering"],
    ["General", "others"],
    ["Groceries", "big bazar"],
    ["Income", "salary"],
    ["Income", "deposit"],
    ["Income", "rewards"],
    ["Medical", "dr"],
    ["Medical", "doctor"],
    ["Medical", "dr."],
    ["Medical", "nursing"],
    ["Medical", "pharmacist"],
    ["Medical", "physician"],
    ["Medical", "hospital"],
    ["Medical", "medicine"],
    ["Mobile recharge", "airtel"],
    ["Payment", "tranfer"],
    ["Payment", "payment"],
    ["Shopping", "cloths"],
    ["Shopping", "clothing"],
    ["Travel", "travel"]
]

df_categories = pd.DataFrame(category_data, columns=["variable", "value"])

第二步:实现匹配逻辑

写一个简单的匹配函数,这里用不区分大小写的匹配规则,避免因为大小写差异导致匹配失败:

def get_transaction_category(transaction_str):
    # 遍历分类映射表,检查关键词是否存在于交易描述中
    for _, row in df_categories.iterrows():
        if row["value"].lower() in transaction_str.lower():
            return row["variable"]
    # 如果没有找到匹配的关键词,返回默认分类
    return "Uncategorized"

# 对所有交易描述应用匹配函数
category_results = [get_transaction_category(desc) for desc in listvalue]

第三步:查看匹配结果

运行代码后,你可以打印出每个交易对应的分类:

for desc, category in zip(listvalue, category_results):
    print(f"Transaction: {desc}\nCategory: {category}\n")

输出结果如下:

Transaction: POS 541919XXXXXX5316 WWW PAYTM COM POS DEBIT
Category: Uncategorized

Transaction: POS 541919XXXXXX5316 HASBRO CLOTHING POS DEBIT
Category: Shopping

Transaction: Salary for the month of April 2018
Category: Income

可选优化:处理多匹配场景

如果一个交易描述可能匹配多个关键词,你可以修改函数来返回所有匹配的分类:

def get_all_matching_categories(transaction_str):
    matching_categories = [
        row["variable"] 
        for _, row in df_categories.iterrows() 
        if row["value"].lower() in transaction_str.lower()
    ]
    return matching_categories if matching_categories else ["Uncategorized"]

# 应用优化后的函数
multi_match_results = [get_all_matching_categories(desc) for desc in listvalue]

这样如果有多个匹配项,会返回对应的分类列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:01:03