2014-12-02 1 views
1

2 단계 MultiIndex (수준 : '_Date'및 _'ItemId ')와 함께 df1이라는 데이터 프레임이 있습니다. '_ItemId'의 각 값의 여러 인스턴스가 다음과 같이 존재한다 : pandas가 하나의 색인 수준 만 키로 사용되는 경우

       _SomeOtherLabel 
_Date   _ItemId  
2014-10-05  6588921  AA 
        6592520  AB 
        6836143  BA 
2014-10-11  6588921  CA 
        6592520  CB 
        6836143  DA 

난 키 (되지 인덱스)로서 사용 '_ItemId'DF2으로 불리는 제 2 데이터 프레임을 가지고있다. 이 안양에서 _ItemId의 각 값을 하나만이 :

    _ItemId  _Cat 
    0    6588921  6_1 
    1    6592520  6_1 
    2    6836143  7_1 

내가 DF2에서 열 '_Cat'의 값을 복구하고 '_ItemId'의 적절한 값에 대한 DF1로 병합하고 싶다. 이것은 거의 다 (나는 생각 하는가?) 다 대 일의 표준 병합이다. 단, 왼쪽 df에 대한 적절한 키는 다중 인덱스 레벨 중 하나이다. 나는이 시도 :

df1['_cat']=pd.merge(df1,df2,left_index=True, right_on='ItemId') 

을하지만 오류 내 (왼쪽) 인덱스가 실제로 두 개의 키 구성되어 있기 때문에 의미가 가정

"ValueError: len(right_on) must equal the number of levels in the index of "left" 

를 얻을. 필요한 하나의 색인 수준을 선택하려면 어떻게합니까? 아니면이 병합에 대한 더 나은 접근법이 있습니까?

감사합니다.

답변

2

나는 이것을하는 2 가지 방법을 생각할 수 있습니다.

사용 set_index()join() :

>>> df1.join(df2.set_index('_ItemId')) 
        _SomeOtherLabel _Cat 
_Date  _ItemId      
2014-10-05 6588921    AA 6_1 
      6592520    AB 6_1 
      6836143    BA 7_1 
2014-10-11 6588921    CA 6_1 
      6592520    CB 6_1 
      6836143    DA 7_1 

또는 reset_index(), merge() 다음 내가 첫 번째 방법은 빨리해야한다고 생각하지만, 확실하지 않은 새로운 multiindex

을 설정하십시오.

관련 문제