2017-10-14 106 views
1

我有两个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中的大熊猫合并(Python 3中):

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

问题是,该命令会在这两个CSV的结果匹配,但是每当重复第二CSV的CPF_CNPJ_doador出现不止一次线:

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

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

+1

存在问题CPF_CNPJ_doador或CPF_CNPJ被重复或两者都有。 – jezrael

+0

两者都可以复制为CSV(例如,政客可以在不同日期从同一家公司获得捐款)。 –

+0

但是我想要获得所有的捐赠项目,即使它们来自重复的公司。但它们必须存在于第二个CSV中 –

回答

1

我想,一个可行的办法是删除重复两个DataFrames:

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 
+0

非常感谢,但我从第二个CSV中删除了重复行(某些列已更改名称,内容相同): –

+0

ibama_doadores_orig = pd.merge(eleitos_d_doadores,ibama.drop_duplicates('CPF_CNPJ_limpo'),left_on ='CPF_CNPJ_doador_originario',right_on ='CPF_CNPJ_limpo',how ='left') –

+0

嗯,没有重复吗? – jezrael