我是刚接触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']])]
编辑*
预期的输出将是一个数据框,其中仅存在该语句为true的行。
这是错误:
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
答案 0 :(得分:0)
这是一个可行的例子
import pandas as pd
import random
a = random.sample([0,1]*5, 10)
b = random.sample([0,1]*5, 10)
ab = random.sample([0,1]*5, 10)
bc = random.sample([0,1]*5, 10)
df = pd.DataFrame({'A':a,'B':b, 'AB':ab,'BC':bc})
df
A B AB BC
0 0 1 1 0
1 1 0 0 1
2 0 1 0 0
3 1 0 1 1
4 0 1 1 0
5 0 0 1 1
6 1 1 0 0
7 1 0 0 0
8 0 0 0 1
9 1 1 1 1
df[(df['A']==df['AB']) & (df['B']==df['BC'])]
输出是一个新的数据框,其观测值符合既定标准
输出:
A B AB BC
9 1 1 1 1
答案 1 :(得分:0)
您只需在file:///c:/repositories/repo2/trunk
内的括号内添加条件:
首先,创建一个粗略的数据样本,因为除了图像之外您没有提供任何数据样本:
.loc
解决方案,您需要在括号中嵌套每个条件:
# 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)
编辑:您错过/错了什么?:
看看您的过滤器,您将在括号内添加不必要的dfMerged,将代码分成几行(删除“ ** CODE **”内部的所有内容):
dfcheck.loc[(dfcheck['A'] == dfcheck['B']) & (dfcheck['C'] == dfcheck['D'])]
因此,您看到的是在不需要的搜索中进行搜索?应该是:
dfequal=
dfMerged.loc[(dfMerged['MetCode']==dfMerged['GCD_METCODE'])
& (**dfMerged[**dfMerged['Zone Code']==dfMerged['GCD_Senior_ZONE']**]**)
& (**dfMerged[**dfMerged['Municipality Code']==dfMerged['GCD_CSDUID']**]**)]