2017-04-24 5 views
0

여기에서 묻기 전에 많은 것을 시도했습니다. 어떤 도움을 주시면 감사하겠습니다.팬더 데이터 프레임을 연결합니다. 멀티 인덱스 레벨 유지

나는 병합하고자하는 집계 함수의 곱인 두 개의 데이터 프레임을 가지고 있으며 다중 인덱스 레벨을 기반으로 정렬 할 수 있습니다.

궁극적으로
  y2014 y2014  y2014 y2015 y2015 y2015 
      2q  2q  2q  1q  1q 1q 
      min  median mean median mean min 
Serials      
#3843442115 600  1,148 1,171 2,100 364 40 
#5243420535 1,100 1,375 1,359 1,650 169 33 
#0843451718 1,100 1,450 1,429 1,750 178 27 
#7442431510 750  950  975  1,200 112 24 
#7443431921 775  925  972  1,300 155 23 
#7442431323 700  950  925  1,100 97  21 

내가 밖으로 선택할 수 있도록하고 싶습니다 : 나는 그들을 함께 병합하고 싶습니다

 Serial year  quarter min  median  mean   max 
0 #474331000 2014  2 2350000 2350000 2.350000e+06 2350000 
1 #484110AD1 2014  2 185000 185000 1.850000e+05 185000 
2 #484114BA0 2014  2 126000 126000 1.260000e+05 126000 

    Serial year quarter min median  mean  max   
0 #484118020 2015  1  100  100  100  100    
1 #484119AF0 2015  1 160000 165250 165250 170500  
2 #484121AG0 2015  1 120000 120000 120000 120000  

이 닮은 무언가를 얻을 : 여기

같은 모습은 무엇인가 메트릭, 연도, 분기 별 결과 및 시간 경과에 따른 변화를 나타냅니다.

데이터 프레임에 간단한 인덱스가 있습니다. 위에서 본 바와 같이 연도와 분기 레이블이있는 각 열에 태그를 지정하면 다중 인덱스가 필요할 수도 있고 없을 수도 있습니다.

인덱스를 설정 한 후 데이터 프레임을 병합하여 원하는 결과를 얻을 수있는 방법을 찾지 못했습니다.

(년, 분기, 메트릭) 다중 인덱스 수준에서 데이터 프레임을 병합, 쿼리 및 정렬 할 수 있도록 올바른 방향으로 나를 가리켜 주시겠습니까?

답변

0

하나의 솔루션은 단지 열 이름을 설정하는 것입니다 감사합니다, 당신은 위의 양식을해야합니다.

result.columns=[['year']*6,['quarter']*6,['min','median','mean','max','std','count']] 

나중에 해당 열 이름을 기준으로 슬라이스 할 수 있습니다. 여기

0

당신은 갈 :

데이터를 기반으로

원시 입력 :

>>> df1 
     Serial year quarter  min median  mean  max 
0 #474331000 2014  2 2350000 2350000 2350000.0 2350000 
1 #484110AD1 2014  2 185000 185000 185000.0 185000 
2 #484114BA0 2014  2 126000 126000 126000.0 126000 
>>> df2 
     Serial year quarter  min median mean  max 
0 #484118020 2015  1  100  100  100  100 
1 #484119AF0 2015  1 160000 165250 165250 170500 
2 #484121AG0 2015  1 120000 120000 120000 120000 

당신이

>>> df1_transformed = df1.set_index(['Serial', 'year', 'quarter']).unstack().unstack() 
>>> df2_transformed = df2.set_index(['Serial', 'year', 'quarter']).unstack().unstack() 
>>> df1_transformed 
       min median  mean  max 
quarter   2  2   2  2 
year   2014  2014  2014  2014 
Serial 
#474331000 2350000 2350000 2350000.0 2350000 
#484110AD1 185000 185000 185000.0 185000 
#484114BA0 126000 126000 126000.0 126000 
>>> df2_transformed 
       min median mean  max 
quarter   1  1  1  1 
year   2015 2015 2015 2015 
Serial 
#484118020  100  100  100  100 
#484119AF0 160000 165250 165250 170500 
#484121AG0 120000 120000 120000 120000 

당신이 사용할 수있는 찾고있는 멀티 인덱스 컬럼에 그들을 변환 df1_transformed.reorder_levels([2,1,0], axis=1) 당신이 좋아하는 칼럼 인덱스의 순서를 얻으려면,하지만 나는 그걸 간단하게 남겨두고있다.

마지막으로 그들을 결합 : 원시 입력 데이터가 중복되는 일련 번호를 가지고 있지 않기 때문에

>>> final = pd.concat([df1_transformed, df2_transformed], axis=1) 
>>> final 
        min  median  mean  max  min median \ 
quarter    2   2   2   2   1   1 
year    2014  2014  2014  2014  2015  2015 
#474331000 2350000.0 2350000.0 2350000.0 2350000.0  NaN  NaN 
#484110AD1 185000.0 185000.0 185000.0 185000.0  NaN  NaN 
#484114BA0 126000.0 126000.0 126000.0 126000.0  NaN  NaN 
#484118020  NaN  NaN  NaN  NaN  100.0  100.0 
#484119AF0  NaN  NaN  NaN  NaN 160000.0 165250.0 
#484121AG0  NaN  NaN  NaN  NaN 120000.0 120000.0 

       mean  max 
quarter   1   1 
year   2015  2015 
#474331000  NaN  NaN 
#484110AD1  NaN  NaN 
#484114BA0  NaN  NaN 
#484118020  100.0  100.0 
#484119AF0 165250.0 170500.0 
#484121AG0 120000.0 120000.0 

, 최종 매트릭스가 많은 NaN의가 있습니다. 중복 된 일련 번호가있는 경우 NaN이 채워집니다.