2017-05-12 1 views
2

데이터 프레임이 2 개 있습니다. 그 중 하나에는 축구 선수에 대한 일반 정보가 포함되어 있으며 두 번째 데이터 플레이어에는 두 번째 데이터 프레임이 포함되어 있습니다. 둘 다 "id"열을 가지고 있습니다. 그러나, 그들은 같은 길이가 아닙니다.다른 열에 따라 두 개의 데이터 프레임에서 열 선택

첫 번째 데이터 프레임의 "x"와 두 번째 데이터 프레임의 "y"의 두 열을 포함하는 새 데이터 프레임을 만들고 싶습니다. "id"열에는 두 데이터 프레임에 같은 값이 들어 있습니다. 따라서 같은 사람에게 속한 "x"와 "y"열과 일치시킬 수 있습니다.

나는 CONCAT 함수를 사용하여 그것을 할 시도 :

pd.concat([firstdataframe['x'], seconddataframe['y']], axis=1, keys=['x', 'y']) 

하지만 모두 dataframes 동일 인 "ID"의 조건을 적용하는 방법을 알고하지 못했다. 당신이 기본 innermerge해야 할 것 같다

답변

1

id 열, 각 값에 가입하는 것은 고유해야합니다 :

df = pd.merge(df1[['id','x']], df2[['id','y']], on='id') 

샘플 :

df1 = pd.DataFrame({'id':[1,2,3],'x':[4,3,8]}) 
print (df1) 
    id x 
0 1 4 
1 2 3 
2 3 8 

df2 = pd.DataFrame({'id':[1,2],'y':[7,0]}) 
print (df2) 
    id y 
0 1 7 
1 2 0 

df = pd.merge(df1[['id','x']], df2[['id','y']], on='id') 
print (df) 
    id x y 
0 1 4 7 
1 2 3 0 
concat와 해결이 가능

하지만 조금 복잡하므로 인덱스에 가입해야 inner 가입 :

df = pd.concat([df1.set_index('id')['x'], 
       df2.set_index('id')['y']], axis=1, join='inner') 
     .reset_index() 
print (df) 
    id x y 
0 1 4 7 
1 2 3 0 

편집 : id의 고유하지 않은 경우

이 중복 모든 조합을 생성하고 출력 dataframe가 확장됩니다

df1 = pd.DataFrame({'id':[1,2,3],'x':[4,3,8]}) 
print (df1) 
    id x 
0 1 4 
1 2 3 
2 3 8 

df2 = pd.DataFrame({'id':[1,2,1,1],'y':[7,0,4,2]}) 
print (df2) 
    id y 
0 1 7 
1 2 0 
2 1 4 
3 1 2 

df = pd.merge(df1[['id','x']], df2[['id','y']], on='id') 
print (df) 
    id x y 
0 1 4 7 
1 1 4 4 
2 1 4 2 
3 2 3 0 
관련 문제