2017-04-24 6 views
0

다중 인덱스 문제가 있습니다. MultiIndex 형식으로 주가와 PE 비율을 제공하는 타사 패키지를 사용합니다. 내가하려고하는 일은 반복적으로 PE 비율에 대한 평균 및 표준 dev를 계산하는 각 종목마다 두 개의 새로운 열을 추가하는 것입니다. 반복을 통해 MultiIndex 데이터 프레임에 열 추가

거친 데이터 구조

이 코드를 복제 할 수 있습니다

df

나는 아래의 코드와 함께이 임시을 시도했습니다

arrays = [['GOOGL US Equity','GOOGL US Equity','IBM US Equity','IBM US Equity'],['LAST_PRICE','BEST_PE_RATIO']*2] 
columns = pd.MultiIndex.from_arrays(arrays, names=['ticker','field']) 

df = pd.DataFrame(np.random.randn(4,4), 
        columns=columns, 
        index=pd.date_range('20160103',periods=4)) 

출력은 다음과 유사합니다 , 계속해서 키 오류와 슬라이스 오류가 발생합니다 ...

df['GOOGL US Equity']['1 STD DEV'] = df['GOOGL US Equity']['BEST_PE_RATIO'].std() 

새로운 필수 열을 생성하고 시세표를 반복하는 더 많은 pythonic 솔루션이 있습니까?

+1

더 많은 코드보기 – Edward

답변

0

체인 된 인덱싱을 통해 값을 데이터 프레임에 설정하면 때때로 실패하고 결과를 예측하기가 어렵습니다. 이것을보십시오 : Returning a view versus a copy in Pandas. 나는 df[('GOOGL US Equity','1 STD DEV')] = df['GOOGL US Equity']['BEST_PE_RATIO'].std()이 해결책이라고 생각한다. 당신이 많은 시세가있는 경우

는 다음과 같이 그것을 : 당신이 열을 의지하려는 경우

for ticker in df.columns.levels[0]: 
    df[(ticker, '1 STD DEV')] = df[ticker]['BEST_PE_RATIO'].std() 

게다가, df.sort_index(axis=1)를 사용합니다.