我有两个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