2012-07-24 11 views
19

Mam problemy z połączeniami w pandach i próbuję dowiedzieć się, co jest nie tak. że mam dataframe X:Pandy dołączają/scalają/łączą dwie ramki danych

<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) 

powinno być w stanie połączyć się z Y na indeksową prosty rozkaz przyłączenia, w którym Y = x wyjątkiem colnames mają +2.

<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) 

Spodziewam się, że finał będzie miał 1941 non-wartości dla obu. Próbowałem również scalić, ale mam ten sam problem.

Myślałem, że właściwą odpowiedzią był pandas.concat ([x, y]), ale to nie robi tego, co zamierzam.

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) 

edit: Jeśli występują problemy z przyłączyć, przeczytaj odpowiedź Wes jest poniżej. Miałem jeden znacznik czasu, który został zduplikowany.

Odpowiedz

20

Czy Twoje wskaźniki mają duplikaty x.index.is_unique? Jeśli tak, to wyjaśnię zachowanie, które widzisz:

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

Dzięki, to było to. Bardzo to doceniam –

14

Wygląda na to, że chcesz pandas.concat? merge i join czynią, cóż, łączą, co oznacza, że ​​dadzą ci coś opartego na kartezjańskim produkcie z dwóch wejść, ale brzmi to tak, jakbyś chciał je wkleić w jeden wielki stół.

Edytuj: czy próbowałeś połączyć się z axis=1? Wydaje się, że to, co prosisz:

>>> 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

Dzięki, przepraszam. Powinienem wspomnieć, że również wypróbowałem pandas.concat. –

+0

oto co concat wygląda następująco: W [83]: pandas.concat ([x, y]) Out [83]: DatetimeIndex: 3882 wpisy, 2004-10-19 00:00:00 do 2012-07-23 00:00:00 Kolumny danych:close2 3882 wartości inne niż null high2 3882 wartości inne niż null low2 3882 wartości inne niż null open2 3882 wartości inne niż null dtypes: float64 (4) –

+0

Wklejone dane wyjściowe nie wyświetlają się dobrze w komentarzach. Czy możesz edytować swoje pytanie, aby pokazać przykład, jakie są twoje dane i jakie ma być wyniki? – BrenBarn

Powiązane problemy