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

Pandas DataFrame关键词匹配新增列 多匹配取首项并汇总值问题

需求说明
  • 为Pandas DataFrame新增匹配列:基于description列的文本内容,从预定义关键词列表中匹配对应值,若单条文本匹配到多个关键词,仅取文本中第一个出现的匹配关键词填入新列
  • 完成新列添加后,按唯一匹配关键词对value列的数值做求和汇总
现有代码问题

当前实现无法满足需求的核心原因:

  • 用str.findall()会提取单条文本中所有匹配到的关键词,后续转集合再拼接的逻辑既无序,也保留了所有匹配结果,无法实现「仅取首个匹配项」的要求
  • 多关键词拼接的字符串会被groupby识别为独立分组,无法得到按单个关键词汇总的正确结果
简洁实现方案

直接使用Pandas字符串方法的str.extract()即可,该方法默认返回正则匹配到的第一个结果,天然符合「取首个匹配项」的要求,代码更简洁:

import pandas as pd
import re

kw = ['alpha', 'beta', 'theta', 'delta']
data = {
    'description':['This text contains alpha', 'Here are delta & beta', 'It is beta', 'Another Alpha', 'sometimes Theta too', 'One more BETA'],
    'value': [100,200,300,400,500,600]
}
df = pd.DataFrame(data)

# 大小写不敏感匹配文本中第一个出现的关键词
df['keys'] = df['description'].str.extract(fr'({"|".join(kw)})', flags=re.IGNORECASE).str.lower()
print("新增匹配列后的结果:")
print(df, '\n')

# 按关键词对value求和
df_sum = df.groupby('keys', as_index=False)['value'].sum()
print("关键词汇总求和结果:")
print(df_sum)

运行输出如下:

新增匹配列后的结果:
                description  value   keys
0  This text contains alpha    100  alpha
1     Here are delta & beta    200  delta
2                It is beta    300   beta
3             Another Alpha    400  alpha
4       sometimes Theta too    500  theta
5             One more BETA    600   beta 

关键词汇总求和结果:
    keys  value
0  alpha    500
1   beta    900
2  delta    200
3  theta    500

实现说明:

  • 正则匹配加re.IGNORECASE标记直接支持大小写不敏感匹配,不需要提前将整列文本转为小写
  • str.extract()按文本从左到右的扫描顺序返回第一个命中的关键词,不需要额外编写取首项、去重的逻辑
  • 分组时指定as_index=False可以避免把分组列设为索引,输出格式更规整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:01:07