2017-03-09 2 views
4

아래와 같이 세 가지 데이터 프레임을 결합하려면 어떻게해야합니까?조건에 따라 서로 다른 3 가지 데이터 프레임 병합

첫 번째 두 요소의 기본 관계는 두 데이터 프레임 간의 일치 관계이므로 ID1을 기반으로해야합니다.

세 번째 dataframe는 주소 2는

DF1 해시에 추가하기 위해 일치해야합니다 :

Name1 Name2 Name3 Address ID1  ID2 Own 
Matt John1 Jill  878 home 1  0  Deal 
Matt John2 Jack  879 home 2  1  Dael 

DF2 :

Name1 ID1 Address Name4  Address2 
Matt 1  878 home face1  face\123 
Matt 1  878 home face2  face\345 
Matt 1  878 home face3  face\678  
Matt 2  879 home head1  head\123 
Matt 2  879 home head2  head\345 
Matt 2  879 home head3  head\678 

DF3 :

Address2  Hash 
face\123  abc123 
face\345  cde321 
face\678  efg123 
head\123  123efg 
head\345  efg321 
head\678  acd321 

나는 다음과 같은 일에 세 dataframes : DF1 사이와 키 DF2

Name1 Name2 ID1 Address  Own Name3 ID2 Name4 Address2 Hash 
Matt John1 1 878 home Deal Jill 0 face1 face\123 abc123 
Matt John1 1 878 home Deal Jill 0 face2 face\345 cde321 
Matt John1 1 878 home Deal Jill 0 face3 face\678 efg123 
Matt John2 2 879 home Dael Jack 1 head1 head\123 123efg 
Matt John2 2 879 home Dael Jack 1 head2 head\345 efg321 
Matt John2 2 879 home Dael Jack 1 head3 head\678 acd321 

는 DF2 간의 Id1에 하고

는 당신의 도움을 주셔서 감사합니다 키가 주소 2

입니다 DF3.

+1

여기서 열 교차 부분에 병합하지 않습니까? 'df1.merge (df2) .merge (df3)'? – miradulo

답변

1

merge 함수를 살펴보면, 몇 가지 예가 here입니다. 특정 문제에 대한,이 시도 :

combined_df = df1.merge(df2, on="Id1", how="inner").merge(df3, on="Adress2", how="inner") 
0

나는이 일 것이라 생각합니다. Ther merge 함수는 당신이 가입하고자하는 열에서 당신을 위해 거의 그것을 수행합니다. 원하는 출력에서 ​​

import numpy as np 
import pandas as pd 

data = np.array([['Name1','Name2','Name3','Address','ID1','ID2','Own'], 
       ['Matt','John1','Jill','878 home','1','0','Deal'], 
       ['Matt', 'John2', 'Jack', '879 home', '2', '1', 'Dael']]) 

data2 = np.array([['Name1','ID1','Address','Name4','Address2'], 
       ['Matt', '1','878 home','face1',"face.123"], 
       ['Matt', '1','878 home', 'face2','face.345'], 
        ['Matt', '1','878 home', 'face3', 'face.678'], 
        ['Matt', '2', '879 home', 'head1', 'head.123'], 
        ['Matt', '2', '879 home', 'head2', 'head.345'], 
        ['Matt', '2', '879 home', 'head3', 'head.678']]) 
#print(data) 
data3 = np.array([['Address2','Hash'], 
       ['face.123', 'abc123'], 
       ['face.345','cde321'], 
       ['face.678', 'efg123'], 
       ['head.123', '123efg'], 
       ['head.345', 'efg321'], 
       ['head.678', 'acd321']]) 

df1 = pd.DataFrame(data=data[1:,:], columns=data[0,:]) 
df2 = pd.DataFrame(data=data2[1:,:], columns=data2[0,:]) 
df3 = pd.DataFrame(data=data3[1:,:], columns=data3[0,:]) 


Cdf= pd.merge(df1,df2, on='ID1', how='inner') 
Ddf = pd.merge(Cdf,df3, on = 'Address2', how='inner') 
print(Ddf) 
0

, 당신은 열 교차로를 벗어나는 사양이 기본적으로 이루어집니다 병합 필요로하지 않는 것. 허용 대답은 실제로 문제가 발생할 것입니다 않는 한 당신이 열을 접미사로 한 것으로,에 병합 할 단일 열을 지정

>>> df1.merge(df2).merge(df3) 

    Name1 Name2 Name3 Address ID1 ID2 Own Name4 Address2 Hash 
0 Matt John1 Jill 878 home 1 0 Deal face1 face\123 abc123 
1 Matt John1 Jill 878 home 1 0 Deal face2 face\345 cde321 
2 Matt John1 Jill 878 home 1 0 Deal face3 face\678 efg123 
3 Matt John2 Jack 879 home 2 1 Dael head1 head\123 123efg 
4 Matt John2 Jack 879 home 2 1 Dael head2 head\345 efg321 
5 Matt John2 Jack 879 home 2 1 Dael head3 head\678 acd321 

.

>>> df1.merge(df2, on="ID1", how="inner").merge(df3, on="Address2", how="inner") 

    Name1_x Name2 Name3 Address_x ID1 ID2 Own Name1_y Address_y Name4 \ 
0 Matt John1 Jill 878home 1 0 Deal Matt 878home face1 
1 Matt John1 Jill 878home 1 0 Deal Matt 878home face2 
2 Matt John1 Jill 878home 1 0 Deal Matt 878home face3 
3 Matt John2 Jack 879home 2 1 Dael Matt 879home head1 
4 Matt John2 Jack 879home 2 1 Dael Matt 879home head2 
5 Matt John2 Jack 879home 2 1 Dael Matt 879home head3 

    Address2 Hash 
0 face\123 abc123 
1 face\345 cde321 
2 face\678 efg123 
3 head\123 123efg 
4 head\345 efg321 
5 head\678 acd321 
관련 문제