基于Pandas(Python)的交易数据文本分类实现求助
给交易数据DataFrame添加匹配标签列的解决方案
嘿,你的思路方向是对的,但得先明确基础标签词的范围——也就是那些单独作为description出现的词(比如foo、bar、baz)。从你的期望输出能看出来,像foobar这种组合成的单个词是要作为独立标签的,而foo bar这种空格分隔的多词则需要拆分后匹配基础标签。
下面是具体的实现步骤和代码:
1. 提取基础标签词
首先筛选出所有description是单个词的行,然后提取这些词的唯一值作为我们的基础标签集合:
import pandas as pd # 构造你的示例数据 data = { 'description': ['foo', 'bar', 'baz', 'foo bar', 'foobar', 'bar baz', 'bazbar'], 'amount': [10, 5, 9, 12, 15, 20, 19] } df = pd.DataFrame(data) # 提取单个词的description,生成基础标签集合 base_tags = set(df[df['description'].str.split().str.len() == 1]['description'].unique())
2. 编写函数生成tag列
我们可以写一个简单的自定义函数,对每一行的description做判断处理:
- 如果是空格分隔的多词:拆分后筛选出属于基础标签的词,用逗号连接起来
- 如果是单个词:直接用这个词本身作为tag(不管它是不是基础标签,比如
foobar这种新词)
def get_tag(desc): words = desc.split() if len(words) > 1: # 多词情况:只保留在基础标签里的词,用逗号拼接 matched_tags = [word for word in words if word in base_tags] return ', '.join(matched_tags) else: # 单个词情况:直接返回原词 return desc # 把函数应用到description列,生成tag列 df['tag'] = df['description'].apply(get_tag)
最终结果
运行上面的代码后,你就能得到完全符合期望的DataFrame:
description amount tag 0 foo 10 foo 1 bar 5 bar 2 baz 9 baz 3 foo bar 12 foo, bar 4 foobar 15 foobar 5 bar baz 20 bar, baz 6 bazbar 19 bazbar
小补充
如果你的实际数据里有标点符号、大小写不一致这类情况,可以先对description做简单清洗(比如去除标点、统一转成小写),再执行上面的步骤,结果会更准确。
内容的提问来源于stack exchange,提问作者Kvothe
相关产品推荐
相关产品推荐

