验证数据帧是否包含列表dict中的内容



我意识到标题有点模糊,但让我来举例说明。

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

Date | transaction | amount
01-01-2020 | something keywordA something | 50
01-01-2020 | something something keywordB | 152
02-01-2020 | keywordA something else | 200

etc

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

df['Category'] = ''

现在我也有一个这样的列表:

categories={'category A':['keywordA','keywordB'], 'category B':['keywordC']}

etc

现在我想做的是查看每行的事务列是否包含其中一个关键字,以及它是否包含e.keywordA。我希望用"category A"填充类别列。

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

所以。。关于我应该朝哪个方向看,有什么提示吗?

据我所知,您可以在反转字典后使用series.str.extractseries.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)

print(df)
Date                   transaction  amount    Category
0 2020-01-01  something keywordA something      50  category A
1 2020-01-01  something something keywordB     152  category A
2 2020-02-01       keywordA something else     200  category A

最新更新