2015-01-27 4 views
1
>new_dat=dat_corr.merge(dat_class,on="Asset",how="right").set_index(['Country','‌​Class','Asset']) 
>new_dat.shape 
(89, 89) 
>temp1='UNITEDSTATES' 
>temp2='Equity' 
>new_dat.loc[ (new_dat.index.get_level_values('Country').isin([temp1]) & new_dat.index.get_level_values('Class').isin([temp2]))]' 
>new_dat.columns=new_dat.index 

마지막 줄에 나에게 [3 행 x 89 열]이 있습니다. 내 89 열은 주식/FX/FI/상품의 혼합입니다. 만약 내가 미국 공평 vs 다른 모든 주식과 enitre 89 칼럼을 원한다면 어떻게해야합니까? 또한 열에 다중 색인을 추가했습니다.팬더 멀티 인덱스 데이터 프레임의 서브 세트를 추출하십시오.

나라 미국 에선 캐나다 \ 클래스 주식 자본
자산 DJ1Index SP1Index ND1Index : 문제는 내가 아래 을 필터링하는 데이터의 일부분임을 어떻게 사용합니까 두 행과 열을 따라 다중 인덱스를 가지고 지금 PT1Index
나라 클래스 자산
미국 에선 주식 DJ1Index 1.000000 0.958038 0.747192 0.648373
SP1Index 0.958038 1.000000 0.825458 0.717545
ND1Index 0.747192 0.825458 1.000000 0.612487
,691 363,210 캐나다 주식 PT1Index 0.648373 0.717545 0.612487 1.000000
멕시코 주식 IS1Index 0.622570 0.664499 0.565702 0.575618

나라 멕시코 브라질 독일 영국 \ 클래스 주식 주식 주식 주식
자산 IS1Index BZ1Index VG1Index Z1Index
나라 클래스 자산
미국 에선 주식 DJ1Index 0.622570 0.523704 0.566993 0.520526
SP1 인덱스 0.664499 0.565941 0.587933 0.539138
ND1Index 0.565702 0.484441 0.458135 0.391391
012 3,516,캐나다 주식 PT1Index 0.575618 0.526663 0.499343 0.493260
멕시코 주식 IS1Index 1.000000 0.577041 0.502558 0.487487

답변

1
당신은 다음과 같이 쉼표 후 .loc 방법으로 컬럼 (들)을 추가 할 수 있습니다

:

df.loc[(cond1) & (cond2), 'column_name'] 

이 출력됩니다 당신의 df 하나의 열 column_name 만 있으면 조건에 따라 필터링됩니다. 당신이 목록에 넣어 경우

여러 열을 가질 수 있습니다

df.loc[(cond1) & (cond2), ['column_name1', 'column_name2']] 

당신은 자세한 내용은 docs을 볼 수 있습니다.

편집 : 당신의 열이 또한 경우

MultiIndex 당신은에 대한 IndexSlice을 사용할 수

import pandas as pd 
idx = pd.IndexSlice 
df.loc[(cond1) & (cond2), idx[:,'column_name']] 

idx[:,'column_name'] 것을 여러분 MultiIndex 설정을 조정해야합니다. 나는. MultiIndex의 모든 레벨에 : 또는 column_name이 필요합니다.

유용한 사용 예는 MultiIndex docs에서 찾을 수 있습니다. 당신의 Index을 lexsorted해야하고 당신 판도 버전이 0.14. +이어야하는 필요성에 대한 경고를 주목할 가치가 있습니다.

데이터 프레임의 재현 가능한 예제를 작성하면보다 구체적인 대답을내는 것이 더 쉬울 것입니다.

+0

응답 해 주셔서 감사합니다. 그러나 그것은 제가 원했던 것을 성취하는 데 도움이되지 않습니다. 나는 그 질문을 갱신했다. – user2819398

+0

죄송합니다.이 질문에서 나에게 명확하지 않았습니다. 위의 정보를 추가했습니다. 희망이 도움이됩니다. – Primer

+0

> new_dat1 = new_dat.loc [ (new_dat.index.get_level_values ​​('국가). | SIN ([TEMP1]) 및 new_dat.index.get_level_values ​​("클래스"). | SIN ([이 TEMP2]))] > new_dat2 = new_dat1.xs (temp3, level = '국가', 축 = 1, drop_level = 거짓) > final_dat = new_dat2.xs (temp4, level = '클래스', 축 = 1, drop_level = 거짓) multiindex (행과 열)를 필터링하는 데 사용됩니다. – user2819398

관련 문제