为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Pandas 根据多个条件选择数据

使用 Pandas 根据多个条件选择数据

忽然笑 2021-10-12 16:36:32
我是使用 Pandas 的新手。我想从多列值匹配的数据框中选择行。沿着以下路线:如果 A 列等于 AB 列且 B 列等于 BC 列那么我想要这些值。我实际上并没有使用 if 语句,我读到迭代不适用于熊猫。我试图找到一个解决方案,我不确定这是我的语法还是它对列的不同数据类型不满意?我的代码有点长,所以我只提供我尝试选择的行,但如果有帮助,我可以发布整个代码。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_CSDUIDA100101,7175,1005018,303006,303006,7175,1005018A100102,7175,1005018,303006,303006,7175,1005018A100103,7175,1005018,303006,303006,7175,1005018A100104,7280,1006009,202003,202003,7280,1006009A100105,7300,1006017,202003,202003,7300,1006017A100108,7300,1006017,202003,202003,7300,1006017A100109,7300,1006017,202003,202003,7300,1006017A100110,1640,1001485,101001,101001,1640,1001485A100111,1640,1001517,101001,101001,1640,1001517A100114,9000,1008011,202003,202003,0,1008011A100115,9000,1001370,101002,101002,0,1001370A100119,9000,1003034,202003,202003,0,1003034
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

您只需要在括号内添加条件,.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'])]


查看完整回答
反对 回复 2021-10-12
  • 1 回答
  • 0 关注
  • 445 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号