2012-07-24 3 views
19

팬더에 조인하는 데 문제가 있으며 무엇이 잘못되었는지 파악하려고합니다. 내가 가진 말하는 dataframe X :팬더가 두 개의 데이터 프레임을 결합/병합/연결

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

내가 COLNAMES 제외하고 Y = X가 +2가 어디 명령을 결합하는 간단한와 인덱스에 Y로 가입 할 수 있어야한다.

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

최종본에는 모두 1941 개가 아닌 값이 있어야합니다. 병합도 시도했지만 같은 문제가 있습니다.

나는 올바른 대답이 pandas.concat ([x, y])라고 생각했지만, 이것은 내가 의도 한대로하지 않습니다.

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) 

편집 : 당신이 가입에 문제가있는 경우 는 아래의 웨스의 답변을 읽어 보시기 바랍니다. 복제 된 타임 스탬프가 하나 있습니다.

답변

20

인덱스에 중복이 있습니까 x.index.is_unique? 그렇다면 당신이 보는 행동을 설명해 줄 것입니다 :

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

고마워요. 정말 감사 –

14

어쩌면 당신이 원하는 것 같습니다. pandas.concat? mergejoin은 잘 결합됩니다. 즉, 두 입력의 데카르트 곱을 기반으로 한 것을 제공하지만, 하나의 큰 테이블에 함께 붙여 넣는 것처럼 들립니다.

편집 : axis=1과 연결을 시도 했습니까? 그것은 당신이 요구하는 것을하는 것처럼 보입니다 :

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

고마워, 미안. 나는 pandas.concat도 시도했다고 언급 했어야했다. 여기 –

+0

는 CONCAT 보이는 것입니다 같은 pandas.concat ([이 X, Y]) 출력 [83] : <클래스 'pandas.core.frame.DataFrame'> DatetimeIndex : 3882 [83]에 entries, 2004-10-19 00:00:00에서 2012-07-23 00:00:00까지 2012-05-23 00:00:00 데이터 열 : close2 3882 null이 아닌 값 high2 3882 null이 아닌 값 low2 3882 null이 아닌 값 open2 3882 0이 아닌 값 dtypes : float64 (4) –

+0

붙여 넣기 결과가 주석에 잘 표시되지 않습니다. 질문을 편집하여 데이터가 무엇이고 출력 결과를 원하는지 보여줄 수 있습니까? – BrenBarn

관련 문제