通过标签集中的成员资格过滤 Pandas DataFrame

pas*_*ssy 5 python filter pandas

假设我有一个包含一个列表或一组标签的 DataFrame,我想根据某个标签是否是该行的一部分来过滤 DataFrame,用 Pandas 实现这一点的最惯用的方法是什么?

import pandas as pd

df = pd.DataFrame({
    'amount': [15, 20, 40],
    'tags': [["Food", "Eating Out"], ["Food", "Groceries"], ["Clothes"]],
    'description': ["Garfunkel's", "Tesco", "Hollister"]
})
Run Code Online (Sandbox Code Playgroud)

我有一段有效的代码,但编写起来相当笨拙:

criterion = lambda row: 'Food' in row['tags']
df[df.apply(criterion, axis=1)]
Run Code Online (Sandbox Code Playgroud)

结果应该是:

结果

Mar*_*ius 5

您只能将 alambda应用于相关列,而不是整行:

df[df['tags'].map(lambda tags: 'Food' in tags)]
Run Code Online (Sandbox Code Playgroud)