首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Pandas -使用.loc对多个列使用AND和OR进行选择

Python Pandas -使用.loc对多个列使用AND和OR进行选择
EN

Stack Overflow用户
提问于 2020-10-23 08:54:42
回答 1查看 157关注 0票数 2

我遇到过这样一种情况:我试图从一个数据帧中选择一些场景。下面的代码是我目前使用的代码:

代码语言:javascript
运行
复制
dfWater1 = left_merged.loc[left_merged.BVG_2M.isin(['34']) and left_merged.VHC_SC.isin(['6. Nil veg']) and left_merged.wetland.isin(['Estuarine wetlands (e.g. mangroves).', 'Lacustrine wetland (e.g. lake).']) | left_merged.RE.isin(['water', 'reef', 'ocean', 'estuary', 'canal'])].copy()

或者,使用一些额外的括号来包含AND和分隔OR:

代码语言:javascript
运行
复制
dfWater1 = left_merged.loc[(left_merged.BVG_2M.isin(['34']) and left_merged.VHC_SC.isin(['6. Nil veg']) and left_merged.wetland.isin(['Estuarine wetlands (e.g. mangroves).', 'Lacustrine wetland (e.g. lake).'])) | (left_merged.RE.isin(['water', 'reef', 'ocean', 'estuary', 'canal']))].copy()

基本上,我要求在以下位置选择行:

代码语言:javascript
运行
复制
   (
      Column BVG_2M = 34
         AND
      Column VHC_SC = '6. Nil veg'
         AND
      Column wetland is one of the following ['Estuarine wetlands (e.g. mangroves).', 'Lacustrine wetland (e.g. lake).']
   )
OR
   (
      Column RE is one of the following ['water', 'reef', 'ocean', 'estuary', 'canal']
   )

数据集非常大,所以我想尽量保持选择的速度(因此使用.loc并以矢量化的方式处理),如果可能的话,尽量避免创建超过保留内存所需的数据帧。

我认为,我真正的问题是,我不确定如何构造.loc语句,甚至不确定我是否可以这样做。

错误消息

代码语言:javascript
运行
复制
File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\pandas\core\generic.py", line 1479, in __nonzero__
    f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 09:14:45

您应该使用&而不是and,并用括号将每个条件括起来。在新行上设置格式,并将所有内容对齐,这也有助于防止括号错误:

代码语言:javascript
运行
复制
dfWater1 = left_merged.loc[((left_merged.BVG_2M.isin(['34'])) &
                            (left_merged.VHC_SC.isin(['6. Nil veg'])) &
                            (left_merged.wetland.isin(['Estuarine wetlands (e.g. mangroves).', 'Lacustrine wetland (e.g. lake).']))) 
                          | (left_merged.RE.isin(['water', 'reef', 'ocean', 'estuary', 'canal']))].copy()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64492454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档