python - 验证数据框是否包含列表字典中的内容

标签 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':['keywordA','keywordB'], 'category B':['keywordC']}

等等

现在我想做的是查看每行的事务列是否包含一个关键字,以及它是否包含例如。 keywordA 我希望类别列填写“类别 A”。

所以首先我不确定使用列表字典是否适合这里。其次,我可能会逐行进行,执行包含类型的函数并与 dict 中的每个项目进行比较,但是从我读到的内容来看,当您使用 pandas 时,迭代每一行通常是不好的做法,而且直觉上这会非常糟糕。

那么..关于我应该看哪个方向的任何提示?

最佳答案

据我了解,您可以在反转字典后使用 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

关于python - 验证数据框是否包含列表字典中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62801100/

相关文章:

python - 使用 psycopg2 创建 postgresql 数据库

python - 为什么我需要使用 'while' 函数来解决这个问题?

python - Pandas 切片/选择多个条件与或语句

python - 从 pandas Python 和 Numpy 将 3D 数组转换为 2d 数组

Pandas 按一个热编码列分组

python - append 数据框的更有效方法

python - OSError : out of pty devices 故障排除

python - 遍历目录路径并使用 trimesh 打开它们

python - 根据多列之间的差异过滤数据框

python - 在 Pandas 中按组连续获得最长的连续数周