2017-11-23 7 views
0

내가 2 dataframes, DF1 및 DF2을 가지고 있다고 가정동일한 인덱스를 가진 첫 번째 데이터 프레임에서 행을 제거하면서 pandas 데이터 프레임을 병합하는 방법은 무엇입니까?

subject_id first_name last_name   
1    Alex Anderson 
2     Amy Ackerman 
3    Allen  Ali 
4    Alice  Aoni 
5    Ayoung Atiches 

subject_id first_name last_name 
4    Billy Bonder 
5    Brian  Black 
6    Bran Balwner 
7    Bryce  Brice 
8    Betty Btisan 

자신의 인덱스가 나는 다음과 같은 얻을 수있는 방법, subject_id되어 있다고 가정하자 :이에서 오전 동안

subject_id first_name last_name   
1    Alex Anderson 
2     Amy Ackerman 
3    Allen  Ali 
4    Billy Bonder 
5    Brian  Black 
6    Bran Balwner 
7    Bryce  Brice 
8    Betty Btisan 

것은,이 문제를 어떻게 얻을 수 :

subject_id first_name last_name   
1    Alex Anderson 
2     Amy Ackerman 
3    Allen  Ali 
4    Alice  Aoni 
5    Ayoung Atiches 
6    Bran Balwner 
7    Bryce  Brice 
8    Betty Btisan 

답변

2

사용 combine_first하고 필요한 경우 첫 번째 set_index :

우리는 pd.concatdrop_duplicates를 사용 할 수 6,
df11 = df1.set_index('subject_id') 
df22 = df2.set_index('subject_id') 

df3 = df22.combine_first(df11).reset_index() 
print (df3) 
    subject_id first_name last_name 
0   1  Alex Anderson 
1   2  Amy Ackerman 
2   3  Allen  Ali 
3   4  Billy Bonder 
4   5  Brian  Black 
5   6  Bran Balwner 
6   7  Bryce  Brice 
7   8  Betty Btisan 

df3 = df11.combine_first(df22).reset_index() 
print (df3) 
    subject_id first_name last_name 
0   1  Alex Anderson 
1   2  Amy Ackerman 
2   3  Allen  Ali 
3   4  Alice  Aoni 
4   5  Ayoung Atiches 
5   6  Bran Balwner 
6   7  Bryce  Brice 
7   8  Betty Btisan 
+0

알아 차 렸습니까 ... ... 그래서 형식 기능을 숨 깁니다 ... – Wen

+0

와우, 이것은 매력처럼 작동합니다. 이 모든 시간 동안 병합을 보았고 @Wen이 연결을 연결 한 다음 중복을 제거하는 것에 대해 언급했지만 더 많은 Pythonic 방법이 있다는 것을 알았습니다. 고마워요. – mrGreenBrown

+0

@Wen - 예, 때때로 발생합니다. – jezrael

1

는 (죄송 SO 것 같아, 자신의 형식을 숨기 ..., 그것은 ... 대답은 추한 것)

pd.concat([df1,df2]).drop_duplicates('subject_id',keep='first')

Out[95]: subject_id first_name last_name 0 1 Alex Anderson 1 2 Amy Ackerman 2 3 Allen Ali 3 4 Alice Aoni 4 5 Ayoung Atiches 2 6 Bran Balwner 3 7 Bryce Brice 4 8 Betty Btisan pd.concat([df1,df2]).drop_duplicates('subject_id',keep='last')

Out[96]: subject_id first_name last_name 0 1 Alex Anderson 1 2 Amy Ackerman 2 3 Allen Ali 0 4 Billy Bonder 1 5 Brian Black 2 6 Bran Balwner 3 7 Bryce Brice 4 8 Betty Btisan

+0

그래, 그게 내가 시도한 방법이지만, 나는 하나의 라이너를 찾고 있었고 @jezrael는 큰 해답을 주었다. 어쨌든 고마워요 :) – mrGreenBrown

+0

@mrGreenBrown 좋아, 타이밍을 확인하자. – Wen

+0

@mrGreenBrown은 처음에는 결합하는 것이 옳은 것 같지만 조금 느린 것 같습니다 ... – Wen