【发布时间】:2015-03-04 17:55:56
【问题描述】:
假设我有一个包含一个列表或一组标签的 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"]
})
我有这段代码可以运行,但是写起来比较笨重:
criterion = lambda row: 'Food' in row['tags']
df[df.apply(criterion, axis=1)]
结果应该是:
【问题讨论】:
-
在单个单元格中具有多个值在
pandas中并不是特别惯用的——我有时自己会这样做,但这使得使用典型的pandas惯用语变得非常困难。考虑到您当前的解决方案看起来相当不错,我不确定您会得到多好。 -
这是 Kaggle 购物比赛之一吗?
-
事实上你可以将你的字符串转换成
Categoricals,不需要每次都进行字符串匹配(假设完整的标签集是已知的)。 -
哦,这很有趣,smci。是的,我实际上可以生成完整的标签集。
-
单独的分类/布尔列比包含集合或列表的列要好,这会真正搞乱向量化。自己尝试并证明它。