Python 如何消除熊猫的重复值?

Python 如何消除熊猫的重复值?,python,pandas,Python,Pandas,我有两个CSV。一个是关于对政客的捐赠:每一行都是一笔捐赠,每一行都有捐赠公司的名称和该公司的联邦注册号(CPF_CNPJ_doador-该国每家公司的唯一编号) 另一家CSV的公司存在环境违规行为。您有多个数据,包括公司名称和该公司的联邦注册号(CPF_CNPJ-该国每家公司都是唯一的)。 但是,一家公司可能不止一次出现在CSV中,例如,它可能有多个违规的附属公司 Nome_Razao_Social CPF_CNPJ Carajas Madeiras Industria e Comerci

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

另一家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中查找结果匹配项,但每当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
...

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

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

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


有一个问题,
CPF\u CNPJ\u doador
CPF\u CNPJ
是重复的,或者两者都是重复的。两者都可以在CSV中重复(例如,一个政客可以在不同的日期收到同一家公司的捐款)。但我想得到所有的捐款额度,即使它们来自重复公司的额度。但它们必须存在于第二个CSV中。问题是,如果该公司在第二个CSV中不止一次被引用,那么捐赠将加倍,然后以错误的方式确定。如果
CPF\u CNPJ\u doador
第一个值是
0764506200018
,那么期望的产出是什么?是否要将一列中的第一个重复值与第二个df列中的第一个重复值进行匹配?非常感谢,但我只删除了第二个CSV中的重复行(有些列我更改了名称,内容相同):ibama_doadores_orig=pd.merge(eleitos_d_doadores,ibama.drop_duplicates('CPF_CNPJ_limpo'))然后我删除了空结果:从第一个CSV中,我希望有重复的结果,正如我所说的。因为它们是商务礼品,可以在不同的日期重复。我正在签入Excel数据透视表,它看起来很有效。
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