根据列表中的关键字过滤数据框中的文本

2024-06-24

我有一个列表列表,列表的每个子列表都包含用于过滤数据框中文本的关键字。

keywords = [[('tarifa',), ('mantenimiento',), ('mensual',)],  
[('tasa',), ('anual',)],    
[('seguro',), ('bancaria',)],  
[('seguro',), ('generales',)],  
[('mi salud',), ('unific',)]] 

我曾经通过手动输入关键字进行过滤,如下所示:

#for sublist 1:
kw_s = kw_df[kw_df['transaction_description'].str.contains('tarifa') & kw_df['transaction_description'].str.contains('mantenimiento') & kw_df['transaction_description'].str.contains('mensual')]
#for sublist 2:
kw_s = kw_df[kw_df['transaction_description'].str.contains('seguro') & kw_df['transaction_description'].str.contains('generales')]

现在我必须根据mysql表中配置的关键字进行过滤。因此,我将关键字保存在列表列表中,但我不知道如何通过子列表提取关键字来过滤数据帧。

知道我该怎么做吗?

这是数据框的示例

user_id reg_id    date                           transaction_description          value
kw_df = [[5,  56,  Timestamp('2022-01-29 00:00:00'),  'pac c.misalud conv. unificado',  12320.0],
[5,  57,  Timestamp('2021-12-19 00:00:00'),  'cargo seguro proteccion bancaria',  31222.0], 
[5,  60,  Timestamp('2021-04-06 00:00:00'),  'pac sura cia seguros generales',  8657.0],
[5,  178,  Timestamp('2022-03-21 00:00:00'),  'cargo seguro proteccion bancaria',  31222.0], 
[5,  179,  Timestamp('2022-03-01 00:00:00'),  'pac c.misalud conv. unificado',  12320.0], 
[5,  182,  Timestamp('2022-03-15 00:00:00'),  'pac sura cia seguros generales',  8657.0],
[5,  189,  Timestamp('2022-04-21 00:00:00'),  'cargo seguro proteccion bancaria',  31222.0],
[5,  190,  Timestamp('2022-04-01 00:00:00'),  'pac c.misalud conv. unificado',  12320.0],
[5,  193,  Timestamp('2022-04-15 00:00:00'),  'pac sura cia seguros generales',  8657.0],
[5,  206,  Timestamp('2022-05-21 00:00:00'),  'cargo seguro proteccion bancaria',  31222.0],
[5,  256,  Timestamp('2022-06-17 00:00:00'),  'cargo seguro proteccion bancaria',  40222.0]]

如何通过易失的单词子集过滤 DataFrame?

虚拟数据

import numpy as np
import pandas as pd

columns = ['transaction_description', 'value']
data = [
    ['pac c.misalud conv. unificado', 12320.0],
    ['cargo seguro proteccion bancaria', 31222.0], 
    ['pac sura cia seguros generales', 8657.0],
    ['cargo seguro proteccion bancaria', 31222.0], 
    ['pac c.misalud conv. unificado', 12320.0], 
    ['pac sura cia seguros generales', 8657.0],
    ['cargo seguro proteccion bancaria', 31222.0],
    ['pac c.misalud conv. unificado', 12320.0],
    ['pac sura cia seguros generales', 8657.0],
    ['cargo seguro proteccion bancaria', 31222.0],
    ['cargo seguro proteccion bancaria', 40222.0]]

df=pd.DataFrame(data, columns=columns)

keywords = [
    [('tarifa',), ('mantenimiento',), ('mensual',)], 
    [('tasa',), ('anual',)],    
    [('seguro',), ('bancaria',)],  
    [('seguro',), ('generales',)],  
    [('mi salud',), ('unific',)]]

Solving

我将使用一种结构,其中子列表的单词按列排列,或者准确地说,每个单词都作为元组的唯一元素放置在列表中。

让我们向量化str.__contains__使str1 in str2适用于数组的代码:

contains = np.vectorize(str.__contains__)

现在,我将测试这个功能df["transaction_description"]和第四组关键字[('seguro',), ('generales',)]例如:

desc = df['transaction_description']
contains(desc, keywords[3])

在这种情况下,我们得到以下结果:

array([[False,  True,  True,  True, False,  True,  True, False,  True,  True,  True],
       [False, False,  True, False, False,  True, False, False,  True, False, False]])

现在,为了查看是否可以在描述中找到该子集的所有单词,我们应用该方法all沿着前一个矩阵的第一个索引:

df[contains(desc, keywords[3]).all(axis=0)]

我们得到这些过滤后的数据:

          transaction_description   value
2  pac sura cia seguros generales  8657.0
5  pac sura cia seguros generales  8657.0
8  pac sura cia seguros generales  8657.0

长话短说

contains = np.vectorize(str.__contains__)
desc = df['transaction_description']
contain_all = lambda words: df[contains(desc, words).all(axis=0)]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据列表中的关键字过滤数据框中的文本 的相关文章

随机推荐

  • 在 C# 中列出类似于 C++ 中的 vector.reserve(n) 的内容

    当添加很多元素时System Collections Generic List
  • 打开本地文件时如何绕过 document.domain 限制?

    我有一组 HTML 文件 使用 JavaScript 生成导航工具 索引 目录等 这些文件只能在本地打开 例如 file 不能在 Web 服务器上提供 从 Firefox 3 x 开始 当单击将为目录生成新框架的导航按钮时 我们会遇到以下错
  • 如何使用 Logger.new 创建文件夹(如果不存在)?

    我正在尝试注册一个新日志 my logger Logger new Rails root log my log 但是当我尝试生成新文件夹时 将其放入其中 my logger Logger new Rails root log today t
  • ejs如何迭代对象

    我有一个简单的对象文字 其地址如下所示 address country String state String city String zip String street String 它位于我通过express js渲染函数传递的对象内部
  • 如何在 Lift 中反序列化 DateTime

    我在将 org joda time DateTime 字段从 JSON 反序列化到案例类时遇到问题 JSON val ajson parse creationDate 2013 01 02T10 48 41 000 05 00 我还设置了这
  • .net core nginx 托管套接字不允许 http post

    我正在尝试创建一个具有 http 功能 包括 http post 功能 以及 Web 套接字 例如 signalR 的网站 我正在尝试使用 nginx 在 ubuntu 服务器上托管此网站 一般来说 nginx 上的设置是这样的 serve
  • 如何在 Android 上动态地将元素添加到 ListView 中?

    任何人都可以解释或建议动态创建一个教程ListView https developer android com reference android widget ListView在安卓中 这是我的要求 我应该能够通过按下按钮动态添加新元素
  • Rails 检测用户是否是第一次访问

    如果用户是第一次访问该网站 我会尝试让他们填写一份调查问卷 我的控制器设置如下 class MainController lt BaseController end class BaseController lt ApplicationCo
  • 如何从多个列表项中的元素获取值

    我有很多div in li元素 我想从课堂上获取文本 Value and Name 我怎样才能以这种格式获取这些值 25 ok 80 good 90 no ul li div class div class div class Value
  • 将非透明像素转换为黑色

    我正在寻找一种转换图像的方法 以便所有非透明像素 alpha 1 的像素 转换为黑色和不受影响的透明像素 或转换为白色 我得到的最接近的是下面的 imagemagick 命令 convert img colorspace Gray
  • Jenkins 管道 - 如何在不首先调用 node() 的情况下加载 Jenkinsfile?

    我有一个有点独特的设置 我需要能够动态加载位于我正在构建的 src 之外的 Jenkinsfiles Jenkinsfiles 本身通常调用node 然后调用一些构建步骤 这会导致多个执行器不必要地被消耗 因为我需要已经调用了 node 才
  • Android 文本顶部居中对齐

    如果这是重复的 我很抱歉 但我找不到任何我正在寻找的东西 基本上 我想将文本视图中的文本对齐到顶部中心 如果可能的话 我想用 XML 来做这件事 所以我想结合 android gravity center and android gravi
  • 聚合物跨元素共享样式

    我需要在多个 Polymer 元素之间共享样式 创建 styles html 文件然后将其导入到我的不同元素中是否可以接受 或者随着应用程序的增长 这会开始对性能产生影响吗 我知道 0 5 有一个核心样式 但如果导入也能正常工作 那么它似乎
  • 在 netbeans 中制作加载屏幕

    我创建了一个带有我想要的按钮的 JFrame 类 因此当您按下该按钮时 它将带您进入启动屏幕 而无需打开另一个 JFrame 但我该怎么做呢 我希望新屏幕中间有一个图像和一个正在加载的 GIF 我喜欢做的就是使用摇摆工人 http docs
  • Git 子树导出和重新导入问题

    我有一个更大的 git 存储库 A 它与我的另一个项目 B 共享一定量的代码 为了使维护更容易 我决定使用公共代码 C 创建第三个存储库 然后通过git subtree 我准备了 A 中的所有内容 将通用代码放在文件夹 sub 中 并使用了
  • 使用可选的 key 参数限制 firebase equalTo 查询

    我有一种感觉 来自 SQL 背景的我对这个特性的理解可能是错误的 文档很少 我找不到很好的例子或解释 我正在寻求对以下内容的澄清https github com angular angularfire2 blob master docs 4
  • 当约束失败时从路由重定向

    我想在路由约束失败时重定向到不同的网址 路由 rb 匹配 u gt user signin constraints gt 黑名单域 黑名单域 rb class BlacklistDomain BANNED DOMAINS domain1 c
  • 如何将 pylab 图保存到内存文件中,该文件可以读入 PIL 图像?

    以下是我的第一个镜头 但从未成功 import cStringIO import pylab from PIL import Image pylab figure pylab plot 1 2 pylab title test buffer
  • Python:动画 3D 散点图变慢

    我的程序绘制了文件中每个时间步的粒子位置 不幸的是 尽管我使用了它 但它变得越来越慢matplotlib animation 瓶颈在哪里 我的两个粒子的数据文件如下所示 x y z t1 1 2 4 4 1 3 t2 4 0 4 3 2 9
  • 根据列表中的关键字过滤数据框中的文本

    我有一个列表列表 列表的每个子列表都包含用于过滤数据框中文本的关键字 keywords tarifa mantenimiento mensual tasa anual seguro bancaria seguro generales mi