Estoy tratando de fusionar dos marcos de datos y eliminar engaños.

Aquí está el DF # 1:

import pandas as pd
data1 = {'id':['168'],'group_id':['360002136432'],'ticket_form_id':['360000159712']}
df1 = pd.DataFrame(data1)
print(df1)

Aquí está el DF # 2

data2 = {'id':['362936613051','362936613051','362936613051'],'ticket_id':['168','168','168']}
df2 = pd.DataFrame(data2)
print(df2)

Estoy tratando de fusionar o consolidar DF # 1 y DF # 2, por lo que se ve así.

id  group_id    ticket_form_id  ID
168 360002136432    360000159712    362936613051

Sería una especie de unión interna (creo) entre DF # 1.id y DF # 2.ticket_id, pero sigo obteniendo un montón de engaños en el marco de datos combinado. ¿Cómo puedo eliminar los engaños en el marco de datos combinado?

Entonces, para ID = 8, esperaría ver 362563740691 y para ID = 10, esperaría ver 362563746711.

enter image description here

En cambio, estoy viendo 362785076491 para ID = 8.

enter image description here

0
ASH 16 oct. 2018 a las 18:23

2 respuestas

La mejor respuesta

Su df2 tiene muchos valores duplicados. No sé si necesita mantener datos redundantes, si no lo necesita, puede soltar duplicados df2

df2.drop_duplicates(inplace = True)
print(df1.merge(df2, left_on = 'id', right_on = 'ticket_id'))

Esto elimina inmediatamente las filas duplicadas en el marco de datos final.

Otra posibilidad es eliminar filas duplicadas después de la fusión.

df1 = df1.merge(df2, left_on = 'id', right_on = 'ticket_id', how = 'inner')                                                                                
df1.drop_duplicates(inplace = True)                                                                                                                        
print(df1) 
2
kaihami 16 oct. 2018 a las 15:38

Suponiendo que todos los pares id / ticket_id en df2 están duplicados como en el ejemplo:

df_new=df1.merge(df2[~df2.duplicated()==1], left_on='id', right_on='ticket_id').drop('ticket_id', axis=1)
1
G. Anderson 16 oct. 2018 a las 15:47