如何消除熊猫的重复价值观



我有两个CSV。一个是关于政客的捐款:每行都是捐款,每行都有捐款公司的名称和该公司的联邦注册号(CPF_CNPJ_doador-国内每家公司都是唯一的)

CPF_CNPJ_doador Nome_doador                               Valor
73668675000187  CWVGRAFICA EDITORA E BAZAR EIRELI LTDA ME 1000,00
83647909000163  CARBONIFERA CRICIUMA S/A 1750,00
10731057000114  HAROLDO AZEVEDO CONSTRUÇÕES LTDA 100,00
...

另一家CSV的公司存在环境违规行为。您有多个数据,包括公司名称和该公司的联邦注册号(CPF_CNPJ-该国每家公司都是唯一的)。但一家公司可能不止一次出现在这个CSV中——它可能有多个分支机构存在违规行为,例如

Nome_Razao_Social   CPF_CNPJ
Carajas Madeiras Industria e Comercio Ltda - Me 02579504000214
Carbo Gás Ltda  03828695000435
Carbomil Química S/A    07645062000108
Carbomil Química S/A    07645062000108
...

我对这两个CSV进行了Panda合并(Python 3):

ibama_doadores = pd.merge(eleitos_d_doadores, ibama, left_on = 'CPF_CNPJ_doador', right_on = 'CPF_CNPJ')

问题是,该命令在两个CSV中查找匹配的结果,但每当CPF_CNPJ_doador的第二个CSV出现多次时,它就会重复这些行:

CPF_CNPJ_doador Nome_doador_originario
7645062000108.0 CARBOMIL QUIMICA S A
7645062000108.0 CARBOMIL QUIMICA S A
7645062000108.0 CARBOMIL QUIMICA S A
...

请问,是否有消除重复值的合并类型?如果在第二数据库中搜索的项目重复

我认为一个可能的解决方案是删除两个DataFrame:中的重复项

ibama_doadores = pd.merge(eleitos_d_doadores.drop_duplicates('CPF_CNPJ_doador'), 
ibama.drop_duplicates('CPF_CNPJ'), 
left_on = 'CPF_CNPJ_doador',
right_on = 'CPF_CNPJ')

或者为计数重复创建新列,并添加此列以进行联接:

eleitos_d_doadores['g'] = eleitos_d_doadores.groupby('CPF_CNPJ_doador').cumcount()
ibama['g'] = ibama.groupby('CPF_CNPJ').cumcount()
ibama_doadores = pd.merge(eleitos_d_doadores, 
ibama, 
left_on = ['CPF_CNPJ_doador','g'],
right_on = ['CPF_CNPJ','g']).drop('g', 1)

样品:

eleitos_d_doadores = pd.DataFrame({
'CPF_CNPJ_doador': ['a','b','c','c','a'],
'B': list(range(1,6))
})
ibama = pd.DataFrame({
'CPF_CNPJ': ['a','b','a','a','c'],
'C': list(range(5))
})
ibama_doadores = pd.merge(eleitos_d_doadores.drop_duplicates('CPF_CNPJ_doador'), 
ibama.drop_duplicates('CPF_CNPJ'), 
left_on = 'CPF_CNPJ_doador',
right_on = 'CPF_CNPJ')
print (ibama_doadores)
B CPF_CNPJ_doador  C CPF_CNPJ
0  1               a  0        a
1  2               b  1        b
2  3               c  4        c

eleitos_d_doadores['g'] = eleitos_d_doadores.groupby('CPF_CNPJ_doador').cumcount()
ibama['g'] = ibama.groupby('CPF_CNPJ').cumcount()
ibama_doadores = pd.merge(eleitos_d_doadores, 
ibama, 
left_on = ['CPF_CNPJ_doador','g'],
right_on = ['CPF_CNPJ','g']).drop('g', 1)
print (ibama_doadores)
B CPF_CNPJ_doador  C CPF_CNPJ
0  1               a  0        a
1  2               b  1        b
2  3               c  4        c
3  5               a  2        a

最新更新