python - boolean 掩码每行中不同长度的列表

标签 python pandas boolean iteration

我有以下数据框:

df = pd.DataFrame({
    'tags': [
        [{'id': 1401}, {'id': 1801}],
        [{'id': 502}, {'id': 703}, {'id': 1801}],
        [{'id': 1801}]
    ]
})

我只对 'tags' 列中的 'id': 1801 值感兴趣,并希望创建一个包含 True< 的新列 如果 'id': 1801 存在,或者 False 如果不存在。

任何帮助将不胜感激

最佳答案

我们可以分解 tags 列,然后使用 str 访问器获取 id 的值并将其与1801 创建一个 boolean 掩码,然后在 level=0 上创建 any 以减少:

df['flag'] = df['tags'].explode().str['id'].eq(1801).any(level=0)

如果数据帧很大并且需要考虑性能,那么我们可以使用列表理解,它将优于所有可用的基于 pandas 的解决方案

df['flags'] = [any(d['id'] == 1801 for d in l) for l in df['tags']]

                                       tags  flag
0              [{'id': 1401}, {'id': 1801}]  True
1  [{'id': 502}, {'id': 703}, {'id': 1801}]  True
2                            [{'id': 1801}]  True

关于python - boolean 掩码每行中不同长度的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67486682/

相关文章:

python - ld : library not found for -lboost_python

python - 提高从 Pandas 列中提取信息的速度

linux - 检查文件是否存在 cron 作业

python - 为什么gevent比线程使用更多的内存

python - 如何在给定特征集作为字典的情况下实现交叉验证和随机森林分类器?

python - 如何根据匹配的列从另一个df创建列?

c - 为什么我们有 boolean 类型?

symfony - 来自 Twig 中的 cookie 的 boolean 值

python - 从 CSV 创建特定格式的 JSON 文件

python - 如何将给定数据框的索引和列名称一起列出?