2012-07-24 27 views
19

Tengo problemas con las uniones en pandas y estoy tratando de descubrir qué es lo que está mal. decir que tengo un dataframe x:pandas join/merge/concat dos dataframes

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 1941 entries, 2004-10-19 00:00:00 to 2012-07-23 00:00:00 
Data columns: 
close 1941 non-null values 
high  1941 non-null values 
low  1941 non-null values 
open  1941 non-null values 
dtypes: float64(4) 

debería ser capaz de unirse a ella y con el índice con un simple comando de unirse a donde y = x 2, excepto COLNAMES tienen.

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 1941 entries, 2004-10-19 00:00:00 to 2012-07-23 00:00:00 
Data columns: 
close2 1941 non-null values 
high2  1941 non-null values 
low2  1941 non-null values 
open2  1941 non-null values 
dtypes: float64(4) 

y.join(x) or pandas.DataFrame.join(y,x): 
<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 34879 entries, 2004-12-16 00:00:00 to 2012-07-12 00:00:00 
Data columns: 
close2 34879 non-null values 
high2  34879 non-null values 
low2  34879 non-null values 
open2  34879 non-null values 
close  34879 non-null values 
high  34879 non-null values 
low  34879 non-null values 
open  34879 non-null values 
dtypes: float64(8) 

Espero que el final tenga 1941 no valores para ambos. Traté de fusionar también, pero tengo el mismo problema.

Pensé que la respuesta correcta era pandas.concat ([x, y]), pero esto tampoco hace lo que tengo pensado.

In [83]: pandas.concat([x,y]) 
Out[83]: <class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 3882 entries, 2004-10-19 00:00:00 to 2012-07-23 00:00:00 
Data columns: 
close2 3882 non-null values 
high2 3882 non-null values 
low2 3882 non-null values 
open2 3882 non-null values 
dtypes: float64(4) 

edición: Si está teniendo problemas con unirse, lea la respuesta de Wes continuación. Tenía una marca de tiempo duplicada.

Respuesta

20

¿Su índice tienen duplicados x.index.is_unique? Si es así, explicaría el comportamiento que está viendo:

In [16]: left 
Out[16]: 
      a 
2000-01-01 1 
2000-01-01 1 
2000-01-01 1 
2000-01-02 2 
2000-01-02 2 
2000-01-02 2 

In [17]: right 
Out[17]: 
      b 
2000-01-01 3 
2000-01-01 3 
2000-01-01 3 
2000-01-02 4 
2000-01-02 4 
2000-01-02 4 

In [18]: left.join(right) 
Out[18]: 
      a b 
2000-01-01 1 3 
2000-01-01 1 3 
2000-01-01 1 3 
2000-01-01 1 3 
2000-01-01 1 3 
2000-01-01 1 3 
2000-01-01 1 3 
2000-01-01 1 3 
2000-01-01 1 3 
2000-01-02 2 4 
2000-01-02 2 4 
2000-01-02 2 4 
2000-01-02 2 4 
2000-01-02 2 4 
2000-01-02 2 4 
2000-01-02 2 4 
2000-01-02 2 4 
2000-01-02 2 4 
+0

Gracias, eso fue todo. Realmente lo aprecio –

14

Parece que tal vez quiere pandas.concat? merge y join hacer, bueno, se une, lo que significa que le darán algo basado en el producto cartesiano de las dos entradas, pero parece que solo quiere pegarlas juntas en una gran mesa.

Editar: ¿intentó concat con axis=1? Parece que hacer lo que estás pidiendo:

>>> print x 
      A   B   C 
0 0.155614 -0.252148 0.861163 
1 0.973517 1.156465 -0.458846 
2 2.504356 -0.356371 -0.737842 
3 0.012994 1.785123 0.161667 
4 0.574578 0.123689 0.017598 
>>> print y 
     A2  B2  C2 
0 -0.280993 1.278750 -0.704449 
1 0.140282 1.955322 -0.953826 
2 0.581997 -0.239829 2.227069 
3 -0.876146 -1.955199 -0.155030 
4 -0.518593 -2.630978 0.333264 
>>> print pandas.concat([x, y], axis=1) 
      A   B   C  A2  B2  C2 
0 0.155614 -0.252148 0.861163 -0.280993 1.278750 -0.704449 
1 0.973517 1.156465 -0.458846 0.140282 1.955322 -0.953826 
2 2.504356 -0.356371 -0.737842 0.581997 -0.239829 2.227069 
3 0.012994 1.785123 0.161667 -0.876146 -1.955199 -0.155030 
4 0.574578 0.123689 0.017598 -0.518593 -2.630978 0.333264 
+0

Gracias, lo siento. Debería haber mencionado que probé pandas.concat también. –

+0

aquí es lo que se ve como concat: En [83]: pandas.concat ([x, y]) de salida [83]: DatetimeIndex: 3882 entradas, 2004-10-19 00:00:00 a 2012-07-23 00:00:00 Columnas de datos: close2 3882 valores no nulos alto2 3882 valores no nulos low2 3882 valores no nulos open2 3882 valores no nulos dtypes: float64 (4) –

+0

La salida pegada no aparece bien en los comentarios. ¿Puedes editar tu pregunta para mostrar un ejemplo de cuáles son tus datos y cuál quieres que sea la salida? – BrenBarn