¿Las pandas se fusionan en la columna de índice?

In [88]: c Out[88]: Address Name CustomerID 10 Address for Mike Mike 11 Address for Marcia Marcia In [89]: c.index Out[89]: Int64Index([10, 11], dtype='int64', name='CustomerID') In [90]: orders Out[90]: CustomerID OrderDate 0 10 2014-12-01 1 11 2014-12-01 2 10 2014-12-01 In [91]: orders.index Out[91]: RangeIndex(start=0, stop=3, step=1) In [92]: c.merge(orders) --------------------------- MergeError: No common columns to perform merge on 

¿Entonces panda no puede fusionarse si la columna de índice en un dataframe tiene el mismo nombre que otra columna en un segundo dataframe?

Debe especificar explícitamente cómo unirse a la tabla. De forma predeterminada, la merge elegirá el nombre de columna común como clave de combinación. Para su caso,

 c.merge(orders, left_index=True, right_on='CustomID') 

Además, lea los documentos de pandas.DataFrame.merge por favor. Espero que esto sea de ayuda.

El método de join realiza una unión a la izquierda de manera predeterminada ( how='left') y se une a los índices de los marcos de datos. Así que establezca el índice del dataframe de los orders en CustomerId y luego únase.

 # Create sample data. orders = pd.DataFrame( {'CustomerID': [10, 11, 10], 'OrderDate': ['2014-12-01', '2014-12-01', '2014-12-01']}) c = pd.DataFrame( {'Address': ['Address for Mike', 'Address for Marcia'], 'Name': ['Mike', 'Marcia']}, index=pd.Index([10, 11], dtype='int64', name='CustomerID')) # Join. >>> c.join(orders.set_index('CustomerID')) Address Name OrderDate CustomerID 10 Address for Mike Mike 2014-12-01 10 Address for Mike Mike 2014-12-01 11 Address for Marcia Marcia 2014-12-01 

Alternativamente, esta merge te dará el mismo resultado. Aquí, se está uniendo en el índice de c (el dataframe de la izquierda) y en la columna CustomerID en el dataframe de la derecha. Asegúrese de especificar how='left' para unir solo los elementos del dataframe derecho a todos los registros de la izquierda (dejando un número equivalente de filas que coincidan con la longitud de c ). El comportamiento predeterminado para la merge es una unión interna, donde el resultado solo incluye los registros de c que encuentran una coincidencia en los orders (aunque este podría ser su resultado deseado).

 c.merge(orders, left_index=True, right_on='CustomerID', how='left') 

Intenta restablecer el índice:

 c.reset_index().merge(orders)