在下面的示例中,如何只保留数组中具有 "a"
的行出现在列 tags
中?
df = pd.DataFrame(columns=["val", "tags"], data=[[5,["a","b","c"]]])
df[3<df.val] # this works
df["a" in df.tags] # is there an equivalent for filtering on tags?
最佳答案
我认为使用集合很直观。然后你可以使用 >=
作为集合包含
df[df.tags.apply(set) >= {'a'}]
val tags
0 5 [a, b, c]
Numpy 的替代方案是
tags = df['tags']
n = len(tags)
out = np.zeros(n, np.bool8)
i = np.arange(n).repeat(tags.str.len())
np.logical_or.at(out, i, np.concatenate(tags) == 'a')
df[out]
根据 @JonClements
你可以在map
中使用set.issubset
(非常聪明)
df[df.tags.map({'a'}.issubset)]
val tags
0 5 [a, b, c]
关于python - 按数据框列中的标签数组过滤和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52760758/