2014-03-05 13 views
1

이것은 바보 같은 질문처럼 보일 수 있지만, 잠시 동안 나를 괴롭 히고 있습니다.팬더는 열을 병합하지만 '키'열은 표시하지 않습니다.

DF1 :

imp_type value 
1   abc 
2   def 
3   ghi 

DF2 :

id   value2 
1   123 
2   345 
3   567 

Merginge 2 개 안양의 :

df1.merge(df2, left_on='imp_type',right_on='id') 

수율 :

imp_type value id value2 
1   abc  1  123 
2   def  2  345 
3   ghi  3  567 

그렇다면 id 열은 본질적으로 imp_type 열과 중복되므로 삭제해야합니다. 병합이 기본적으로 두 데이터 프레임 간의 조인 키를 가져 오는 이유는 무엇입니까? 조인 키를 가져 오지 않으려는 경우 최소한 False로 설정하는 매개 변수가 있어야한다고 생각합니다. 이미 이런거나 뭔가 잘못 됐나요?

+0

'.drop ("id", 1)'을 추가하는 FWIW는 그렇게 나쁘지 않습니다. – DSM

+0

나도 알아,하지만 그것은 처음부터 그렇게 구현되어서는 안되며, 모든 병합이 합쳐져 해키를 느낀 후에해야하기 때문에 그냥 실망 스럽다. – ChrisArmstrong

답변

4

열 중 하나가 삭제되면 좋을 것이라고 동의합니다. 물론 나머지 열의 이름을 지어야하는지에 대한 질문이 있습니다.

어쨌든, 여기에 해결 방법이 있습니다. .drop('id', 1)에 비해 (DSM은 지적으로) 열 이름을 변경

In [23]: df1 = pd.DataFrame({'imp_type':[1,2,3], 'value':['abc','def','ghi']}) 

In [27]: df2 = pd.DataFrame({'id':[1,2,3], 'value2':[123,345,567]}) 

In [28]: df2.columns = ['imp_type','value2'] 

In [29]: df1.merge(df2, on='imp_type') 
Out[29]: 
    imp_type value value2 
0   1 abc  123 
1   2 def  345 
2   3 ghi  567 

특히 고통의 비트입니다 : 조인 된 컬럼 (들)이 같은 이름을 가질 수 있도록 간단하게 열 중 하나의 이름을 바꿉니다. 그러나 조인 된 열이 처음부터 동일한 이름을 갖도록 정렬 할 수 있으면 df1.merge(df2, on='imp_type')이 가장 쉽습니다.

+0

좋은 팁. 내가 얻을 수있는 가장 좋은 대답 일지 모르지만, 다른 옵션이있을 경우에 대비하여 조금 더 열어 두겠습니다. – ChrisArmstrong

관련 문제