Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 验证dataframe是否包含列表目录中的内容_Python_Pandas - Fatal编程技术网

Python 验证dataframe是否包含列表目录中的内容

Python 验证dataframe是否包含列表目录中的内容,python,pandas,Python,Pandas,我知道标题有点模糊,但让我举例说明 我有一个数据帧(简化)如下所示: Date | transaction | amount 01-01-2020 | something keywordA something | 50 01-01-2020 | something something keywordB | 152 02-01-2020 | keywordA something else | 200 df['Category'] = '' categories={'category A'

我知道标题有点模糊,但让我举例说明

我有一个数据帧(简化)如下所示:

Date | transaction | amount

01-01-2020 | something keywordA something | 50

01-01-2020 | something something keywordB | 152

02-01-2020 | keywordA something else | 200
df['Category'] = ''
categories={'category A':['keywordA','keywordB'], 'category B':['keywordC']}

然后,我要做的第一件事是添加一个名为“category”的空列,如下所示:

Date | transaction | amount

01-01-2020 | something keywordA something | 50

01-01-2020 | something something keywordB | 152

02-01-2020 | keywordA something else | 200
df['Category'] = ''
categories={'category A':['keywordA','keywordB'], 'category B':['keywordC']}
现在,我还有一份清单,如下所示:

Date | transaction | amount

01-01-2020 | something keywordA something | 50

01-01-2020 | something something keywordB | 152

02-01-2020 | keywordA something else | 200
df['Category'] = ''
categories={'category A':['keywordA','keywordB'], 'category B':['keywordC']}

现在我想做的是看看每一行的事务列是否包含一个关键字,如果它包含例如关键字A,我想用“category A”填充category列

所以首先,我不确定使用列表的方式是否可行。其次,我可能会一行一行地去做一个contains类型函数,并与dict中的每一项进行比较,但是从我所读到的内容来看,当你使用pandas时,迭代每一行通常是不好的做法,直觉上这将非常糟糕


所以。。关于我应该看哪个方向的任何提示?

据我所知,您可以在反转字典后使用
series.str.extract
series.map
执行此操作:

d = {a:k for k,v in categories.items() for a in v}
#{'keywordA': 'category A', 'keywordB': 'category A', 'keywordC': 'category B'}
pat = r'\b(?:{})\b'.format('|'.join(d.keys()))
df['Category'] = df['transaction'].str.extract('('+pat+')',expand=False).map(d)


嗨,我来试试。但是,在休息了4-5年之后,我刚刚回到python,介意解释一下第二行到底做了什么吗?我得到了第一行,你基本上做了一个新的dict,其中键是列表项,值等于原始键。第三行从事务字符串中提取一个模式并将其映射到新的dict。但是模式定义有点抽象。@Thustra第二行定义了一个模式,该模式通过管道连接新形成的字典的键,并使用一个
'\b'
格式化,它是一个,以便在映射类别之前检查精确的单词匹配。。!!这就像一个魅力:)非常感谢,我仍然需要努力了解如何,但更容易阅读的文件与你知道的东西,工作就在那里。