fusionar dos marcos de datos sin repeticiones pandas

Estoy intentando fusionar dos marcos de datos, uno con columnas: Id. De cliente, nombre completo y correos electrónicos y el otro dataframe con columnas: Id. De cliente, cantidad y fecha. Quiero que la primera ttwig de datos sea la ttwig de datos principal y que se incluya la otra información de la ttwig de datos, pero solo si las identificaciones de los clientes coinciden; Intenté hacer:

merge = pd.merge(df, df2, on='customerId', how='left') 

pero el dataframe que se produce contiene muchas repeticiones y se ve mal:

 customerId full name emails amount date 0 002963338 Star shine star.shine@cdw.com $2,910.94 2016-06-14 1 002963338 Star shine star.shine@cdw.com $9,067.70 2016-05-27 2 002963338 Star shine star.shine@cdw.com $6,507.24 2016-04-12 3 002963338 Star shine star.shine@cdw.com $1,457.99 2016-02-24 4 986423367 palm tree tree.palm@snapchat.com,tree@.com $4,604.83 2016-07-16 

esto no puede ser correcto, por favor ayuda!

Hay un problema que tiene duplicados en customerId columna customerId .

Así que la solución es eliminarlos, por ejemplo, por drop_duplicates :

 df2 = df2.drop_duplicates('customerId') 

Muestra:

 df = pd.DataFrame({'customerId':[1,2,1,1,2], 'full name':list('abcde')}) print (df) customerId full name 0 1 a 1 2 b 2 1 c 3 1 d 4 2 e df2 = pd.DataFrame({'customerId':[1,2,1,2,1,1], 'full name':list('ABCDEF')}) print (df2) customerId full name 0 1 A 1 2 B 2 1 C 3 2 D 4 1 E 5 1 F 

 merge = pd.merge(df, df2, on='customerId', how='left') print (merge) customerId full name_x full name_y 0 1 a A 1 1 a C 2 1 a E 3 1 a F 4 2 b B 5 2 b D 6 1 c A 7 1 c C 8 1 c E 9 1 c F 10 1 d A 11 1 d C 12 1 d E 13 1 d F 14 2 e B 15 2 e D df2 = df2.drop_duplicates('customerId') merge = pd.merge(df, df2, on='customerId', how='left') print (merge) customerId full name_x full name_y 0 1 a A 1 2 b B 2 1 c A 3 1 d A 4 2 e B 

No veo repeticiones como una fila completa, pero hay repeticiones en customerId. Podrías eliminarlos usando:

  df.drop_duplicates('customerId', inplace = 1) 

donde df podría ser el dataframe correspondiente a la cantidad o una fusión posterior obtenida. En caso de que quiera menos filas (digamos n), podría usar:

  df.groupby('customerId).head(n)