2016-09-19 3 views
1

아래의 df1에 열 SUM을 추가하고 싶습니다. 그것은 Datetime MultiIndex이고 새로운 열 SUM은 행의 합계를 반환해야합니다.Multiindex 데이터 프레임에 열 추가

multex = pd.MultiIndex.from_product([['price', 
'weight','quantity','portfolio'] ,df1.index],names=['Date', 'Stats']) 

new_df = pd.DataFrame(index=multex, columns= df1.columns.values.tolist()) 

다음으로 동일한 값을 반환하는 행 SUM을 추가하고자합니다. 내가 해봤 지금까지 다음

df1['SUM']= df1.ix['price'].sum(axis=1) 


          A  B  C  D  E 

2006-04-28 00:00:00          
      price  69.62 69.62 6.518 65.09 69.62 
      weight 
      std 
2006-05-01 00:00:00 
      price   71.5 71.5 6.522 65.16 71.5 
      weight 
      std 
2006-05-02 00:00:00 
      price  72.34 72.34 6.669 66.55 72.34 
      weight 
      std 
+0

나는 것을 사람들이 쉽게 da를 재현 ​​할 수 있도록 질문을 업데이트하십시오. taframe. 또한, df1 [ 'SUM'] = df1.ix [ 'price']. sum (axis = 1)의 결과는 무엇입니까 –

+0

HI. 감사. thats 내가 얻은 오류 : ValueError : 모양이 일치하지 않음 : 모양의 값 배열 (2939)이 모양 (2939,2) – uniXVanXcel

답변

1

먼저 DataFrame.sort_index을 사용할 수 있습니다, 오류 때문에 :

KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (1)'

그런 다음 slicers를 사용

df1 = df1.sort_index() 

idx = pd.IndexSlice 
df1['SUM'] = df1.loc[idx[:,'price'],:].sum(axis=1) 
print (df1) 
           A  B  C  D  E  SUM 
Date    Stats            
2006-04-28 00:00:00 price 69.62 69.62 6.518 65.09 69.62 280.468 
        std  NaN NaN NaN NaN NaN  NaN 
        weight NaN NaN NaN NaN NaN  NaN 
2006-05-01 00:00:00 price 71.50 71.50 6.522 65.16 71.50 286.182 
        std  NaN NaN NaN NaN NaN  NaN 
        weight NaN NaN NaN NaN NaN  NaN 
2006-05-02 00:00:00 price 72.34 72.34 6.669 66.55 72.34 290.239 
        std  NaN NaN NaN NaN NaN  NaN 
        weight NaN NaN NaN NaN NaN  NaN 

df1['SUM'] = df1.loc[(slice(None), slice('price')),:].sum(axis=1) 
print (df1) 
           A  B  C  D  E  SUM 
Date    Stats            
2006-04-28 00:00:00 price 69.62 69.62 6.518 65.09 69.62 280.468 
        std  NaN NaN NaN NaN NaN  NaN 
        weight NaN NaN NaN NaN NaN  NaN 
2006-05-01 00:00:00 price 71.50 71.50 6.522 65.16 71.50 286.182 
        std  NaN NaN NaN NaN NaN  NaN 
        weight NaN NaN NaN NaN NaN  NaN 
2006-05-02 00:00:00 price 72.34 72.34 6.669 66.55 72.34 290.239 
        std  NaN NaN NaN NaN NaN  NaN 
        weight NaN NaN NaN NaN NaN  NaN 
+0

의 인덱싱 결과로 브로드 캐스트되지 못했습니다! 너! – uniXVanXcel

+0

다행히 도울 수 있습니다! – jezrael

+0

한가지 물어볼 수 있습니까? 열과는 대조적으로 두 번째 다중 색인 수준에서 행으로 '합계'를 추가하려면 어떻게해야합니까? 내 질문에 위의 multiindex에 '합계'를 추가했지만 formula.Yanks에 대한 적절한 조정이 필요합니다. – uniXVanXcel

관련 문제