python - 按数据框列中的标签数组过滤和分组

标签 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?

最佳答案

我认为使用集合很直观。然后你可以使用 >= 作为集合包含

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/

相关文章:

python - 为什么新的 Conda 环境没有像 numpy 这样的包?

python - 我需要在 mongodb 中关闭连接吗?

python - Keras Conv2D : filters vs kernel_size

python - 在 python pandas 中查找每个日期的字母计数

python - 迭代 df 以在 python 中创建嵌套字典

scala - Dataframe groupBy,根据聚合函数的结果得到相应的行值

python - 在两列之间单独对每一行进行排序

python - 类型错误 : 'NoneType' object is unsubscriptable

python - Pandas - 列标题到行值

python - 如何在连接时合并大型数据框并消除不相关的列?