筛选并按数据帧列中的标签数组分组

时间:2018-10-11 13:03:37

标签: python pandas dataframe

在以下示例中,如何仅保留列"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?

3 个答案:

答案 0 :(得分:3)

我认为使用集合很直观。然后,您可以使用application.properties作为集合包含

>=

一个笨拙的选择是

df[df.tags.apply(set) >= {'a'}]

   val       tags
0    5  [a, b, c]

@JonClements

您可以在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]