我有以下数据框:
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/