2017-04-23 2 views
1

새 인덱스를 사용하여 두 개의 팬더 데이터 프레임을 새로운 세 번째 데이터 프레임에 결합하고 싶습니다.팬더 : 데이터 프레임 연결 및 다시 색인

NewIndex OldIndex df df1 
1 A 1 2 
2 B 1 2 
3 C 1 2 
4 D 1 2 
5 E 1 2 
6 A 1 2 
7 B 1 2 
8 C 1 2 
9 D 1 2 
10 E 1 2 
11 A NaN 2 
12 B NaN 2 
13 C NaN 2 
14 D NaN 2 
15 E NaN 2 
16 A 1 NaN 
17 B 1 NaN 
18 C 1 NaN 
19 D 1 NaN 
20 E 1 NaN 

이 작업을 수행하는 가장 좋은 방법은 무엇입니까 :

df = pd.DataFrame(np.ones(25).reshape((5,5)),index = ['A','B','C','D','E']) 
df1 = pd.DataFrame(np.ones(25).reshape((5,5))*2,index = ['A','B','C','D','E']) 
df[2] = np.nan 
df1[3] = np.nan 
df[4] = np.nan 
df1[4] = np.nan 

나는 다음과 같은 결과를 달성하기 위해 가장 복잡한 방법을 싶습니다 : 나는 다음과 같이 시작 가정?

답변

1

데이터 프레임을 언 스택 한 다음 연결된 데이터 프레임을 다시 인덱싱해야합니다.

import numpy as np 
import pandas as pd 
# test data 
df = pd.DataFrame(np.ones(25).reshape((5,5)),index = ['A','B','C','D','E']) 
df1 = pd.DataFrame(np.ones(25).reshape((5,5))*2,index = ['A','B','C','D','E']) 
df[2] = np.nan 
df1[3] = np.nan 
df[4] = np.nan 
df1[4] = np.nan 

# unstack tables and concat 
newdf = pd.concat([df.unstack(),df1.unstack()], axis=1) 
# reset multiindex for level 1 
newdf.reset_index(1, inplace=True) 
# rename columns 
newdf.columns = ['OldIndex','df','df1'] 
# drop old index 
newdf = newdf.reset_index().drop('index',1) 
# set index from 1 
newdf.index = np.arange(1, len(newdf) + 1) 
# rename new index 
newdf.index.name='NewIndex' 
print(newdf) 

출력 :

  OldIndex df df1 
NewIndex     
1    A 1.0 2.0 
2    B 1.0 2.0 
3    C 1.0 2.0 
4    D 1.0 2.0 
5    E 1.0 2.0 
6    A 1.0 2.0 
7    B 1.0 2.0 
8    C 1.0 2.0 
9    D 1.0 2.0 
10    E 1.0 2.0 
11    A NaN 2.0 
12    B NaN 2.0 
13    C NaN 2.0 
14    D NaN 2.0 
15    E NaN 2.0 
16    A 1.0 NaN 
17    B 1.0 NaN 
18    C 1.0 NaN 
19    D 1.0 NaN 
20    E 1.0 NaN 
21    A NaN NaN 
22    B NaN NaN 
23    C NaN NaN 
24    D NaN NaN 
25    E NaN NaN 
+1

그래,이 대답은 __much__ 더! – MaxU

+1

이 댓글을 주셔서 감사합니다. – Serenity