python - 如何使用 pandas 检查一个值是否在 1 个或 2 个列表列中
问题描述
我从 json 数据构建了一个 pandas 数据框:
{
'bundle': 'R_FLUSH_DEADLETTERS',
'envs': ['AG','DEV','QUAL','QUAL2','PREPROD','PREPROD2','PROD'],
'envsinfra2021': ['PREPROD2'],
},
{
'bundle': 'R201_QA069_ETIQETTENS_FROMSAP',
'envs': ['DEV','QUAL','QUAL2','PREPROD'],
'envsinfra2021': ['AG','PREPROD2','PROD'],
},
我可以在“envsinfra2021”列表列中检索包含“PROD”的行
df[['PROD' in x for x in df["envsinfra2021"]]]
我可以在“envs”列表列中检索包含“PROD”的行
df[['PROD' in x for x in df["envs"]]]
但是我怎样才能得到 'PROD' 在 'envs' 或 'envsinfra2021' 中的行?我试过这个
df[ ['PROD' in x for x in df["envs"]] or ['PROD' in x for x in df["envsinfra2021"]] ]
但它返回一个空的 DF
解决方案
将列表转换为 numpy 数组并按|
位添加OR
:
df = df[ np.array(['PROD' in x for x in df["envs"]]) |
np.array(['PROD' in x for x in df["envsinfra2021"]])]
print (df)
bundle envs \
0 R_FLUSH_DEADLETTERS [AG, DEV, QUAL, QUAL2, PREPROD, PREPROD2, PROD]
envsinfra2021
0 [PREPROD2]
另一个想法是链标量,所以使用or
:
df = df[['PROD' in x or 'PROD' in y for x, y in zip(df["envs"], df["envsinfra2021"])]]
推荐阅读
- kubernetes - kubernetes:部署失败来自守护进程的错误响应:OCI 运行时创建失败:
- javascript - 对象的 getFullYear()
- gremlin - traversal.asAdmin().addStep(step) 用于远程调用
- html - 在图像上显示项目
- reactjs - 向所有路由声明组件 react-router
- javascript - 如何防止浏览器的 img 绘画可见?
- php - 在 Woocommerce 中显示选择的缺货产品
- python - 在python中显示numpy的帧堆栈
- mysql - 你如何在 Docker 中设置 MySQL 并连接到它?
- java - Java WordCounter