在以下示例中,如何仅保留列"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?
答案 0 :(得分:3)
我认为使用集合很直观。然后,您可以使用application.properties
作为集合包含
>=
一个笨拙的选择是
df[df.tags.apply(set) >= {'a'}]
val tags
0 5 [a, b, c]
您可以在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]
中使用set.issubset
(非常聪明)
map
答案 1 :(得分:1)
使用列表理解:
df1 = df[["a" in x for x in df.tags]]
答案 2 :(得分:0)
您可以将apply
与lambda函数一起使用,该函数可以测试'a'
是否在lambda的arg中:
df.tags.apply(lambda x: 'a' in x)
结果:
0 True
Name: tags, dtype: bool
这也可以用来索引您的数据框:
df[df.tags.apply(lambda x: 'a' in x)]
结果:
val tags
0 5 [a, b, c]