python - 使用 Pandas 根据多个标准选择数据
问题描述
我是使用熊猫的新手。我想从数据框中选择多列值匹配的行。沿着:
如果 A 列等于 AB 列且 B 列等于 BC 列
那么我想要这些价值观。
我实际上并没有使用 if 语句,我读到迭代不适用于 pandas。
我试图找到一个解决方案,我不确定这是我的语法还是它对列的不同数据类型不满意?
我的代码有点长,所以我只提供我尝试选择的行,但如果有帮助,我可以发布整个代码。
dfequal=dfMerged.loc[(dfMerged['MetCode']==dfMerged['GCD_METCODE']) & (dfMerged[dfMerged['Zone Code']==dfMerged['GCD_Senior_ZONE']]) & (dfMerged[dfMerged['Municipality Code']==dfMerged['GCD_CSDUID']])]
编辑*
预期的输出将是一个数据框,其中仅存在语句为真的行。
这是错误:
ValueError:操作数无法与形状一起广播(84778,)(4462,)
这是我从中提取的数据表
FileID,MetCode,Municipality Code,Zone
Code,GCD_Senior_ZONE,GCD_METCODE,GCD_CSDUID
A100101,7175,1005018,303006,303006,7175,1005018
A100102,7175,1005018,303006,303006,7175,1005018
A100103,7175,1005018,303006,303006,7175,1005018
A100104,7280,1006009,202003,202003,7280,1006009
A100105,7300,1006017,202003,202003,7300,1006017
A100108,7300,1006017,202003,202003,7300,1006017
A100109,7300,1006017,202003,202003,7300,1006017
A100110,1640,1001485,101001,101001,1640,1001485
A100111,1640,1001517,101001,101001,1640,1001517
A100114,9000,1008011,202003,202003,0,1008011
A100115,9000,1001370,101002,101002,0,1001370
A100119,9000,1003034,202003,202003,0,1003034
解决方案
您只需在您的括号内添加条件.loc
,而不是在 df 过滤器内重复 DF 过滤器:
首先,创建一个粗略的数据样本,因为除了图像之外您没有提供一个:
# creating the values, first one will be ID, then next 4 will be the values to compare
check_values = [
[1, 5, 10, 20, 30],
[2, 5, 11, 32, 11],
[3, 10, 10, 20, 20],
[4, 9, 9, 11, 11],
[5, 11, 23, 41, 11]
]
# creating columns names
check_cols = ['id', 'A', 'B', 'C', 'D']
# making the DataFrame
dfcheck = pd.DataFrame(check_values, columns=check_cols)
# Setting the id column, just because
dfcheck.set_index('id', inplace=True)
解决方案,您需要将每个条件嵌套在括号内:
dfcheck.loc[(dfcheck['A'] == dfcheck['B']) & (dfcheck['C'] == dfcheck['D'])]
编辑:你错过/做错了什么?:
查看您的过滤器,您在括号内添加了不必要的 dfMerged,您的代码分行(删除“** CODE **”中的所有内容):
dfequal=
dfMerged.loc[(dfMerged['MetCode']==dfMerged['GCD_METCODE'])
& (**dfMerged[**dfMerged['Zone Code']==dfMerged['GCD_Senior_ZONE']**]**)
& (**dfMerged[**dfMerged['Municipality Code']==dfMerged['GCD_CSDUID']**]**)]
所以你看,你在一个不需要的搜索中搜索?它应该是:
dfequal=
dfMerged.loc[(dfMerged['MetCode']==dfMerged['GCD_METCODE'])
& (dfMerged['Zone Code']==dfMerged['GCD_Senior_ZONE'])
& (dfMerged['Municipality Code']==dfMerged['GCD_CSDUID'])]
推荐阅读
- node.js - NodeJS 流式传输远程文件并压缩它,并将其存储在本地
- python - Python通过比较倒数第二个值来加/减计数器
- kubernetes - 带有通配符证书的 openshift ssl 路由配置
- r - 闪亮的动态布局:自动将固定宽度的元素换行到下一行
- python - 如何修复 IndexError?
- mysql - 我经常收到没有这样的主机消息,但我的应用程序正在运行
- python - 正则表达式问题解决两个条件
- google-cloud-platform - Google Cloud Platform:将 VPC 与托管实例组一起使用
- dart - Flutter - 如何在颤动的数字键盘中添加完成按钮
- ubuntu - tmux 未在行首显示当前工作目录