Hola, tengo los siguientes marcos de datos:
> df1
id begin conditional confidence discoveryTechnique
0 278 56 false 0.0 1
1 421 18 false 0.0 1
> df2
concept
0 A
1 B
¿Cómo me fusiono en los índices para obtener:
id begin conditional confidence discoveryTechnique concept
0 278 56 false 0.0 1 A
1 421 18 false 0.0 1 B
Pregunto porque, según tengo entendido, merge()es decir, df1.merge(df2)utiliza columnas para hacer la correspondencia. De hecho, al hacer esto obtengo:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4618, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 58, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 491, in __init__
self._validate_specification()
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 812, in _validate_specification
raise MergeError('No common columns to perform merge on')
pandas.tools.merge.MergeError: No common columns to perform merge on
¿Es una mala práctica fusionarse en el índice? ¿Es imposible? Si es así, ¿cómo puedo cambiar el índice a una nueva columna llamada "índice"?
Gracias

df1.join(df2)Respuestas:
Uso
merge, que es la unión interna de forma predeterminada:O
join, que se deja unir por defecto:O
concat, que es la unión externa de forma predeterminada:Muestras :
fuente
.transpose()uno de sus dfs para sincronizar los índices, ese fue mi problemaconcattiene que poner df entre paréntesisjoinymergeno?dfs = [df1, df2, df3,... dfn]y luegodf = pd. concat(dfs)puede usar concat ([df1, df2, ...], axis = 1) para concatenar dos o más DF alineados por índices:
o fusionar para concatenar por campos / índices personalizados:
o unirse para unirse por índice:
fuente
Por defecto:
joines una combinación izquierda enpd.mergeforma de columnapd.concates una combinación interna en forma de columna es una combinación externa en forma de filapd.concat:toma argumentos Iterable. Por lo tanto, no puede tomar DataFrames directamente (usar
[df,df2]) Lasdimensiones de DataFrame deben coincidir a lo largo del eje
Joinypd.merge:puede tomar argumentos de DataFrame
fuente
Un error tonto que me atrapó: las uniones fallaron porque el índice era
dtypesdiferente. Esto no era obvio ya que ambas tablas eran tablas dinámicas de la misma tabla original. Despuésreset_index, los índices se veían idénticos en Jupyter. Solo salió a la luz al guardar en Excel ...Solucionado con:
df1[['key']] = df1[['key']].apply(pd.to_numeric)¡Ojalá esto le ahorre a alguien una hora!
fuente
Si desea unir dos marcos de datos en pandas, simplemente puede usar los atributos disponibles como
mergeoconcatenate. Por ejemplo, si tengo dos marcos de datosdf1ydf2puedo unirlos mediante:fuente