2017-05-26 5 views
0

マルチインデックスのDataFrameレベル= 1で合計を計算し、結果を新しいデータフレームに格納する方法(this_to_thatから取得するなど)。これは、あなたが探しているもの特定のMultiIndex DataFrameレベルの関数呼び出しのDataFrame

データ

T = ['t1','t2'] 
S = ['S1','S2'] 
K = ['earnings','costs'] 

multi_index = pd.MultiIndex.from_product([T,S]) 
input_df = pd.DataFrame(index = multi_index, columns = K) 
input_df['earnings'] = (150.0,25.0,80.0,40.0) 
input_df['costs'] = (150.0,12.5,36.36,22.72) 

overlaborate方法

dc = dict() 
for t in T: 
    dc[t] = input_df.xs(t, level = 0, axis = 0).apply(sum, axis = 0) 

dc_to_df = pd.concat(dc) 
dc_to_df = pd.DataFrame(dc_to_df) 
dc_to_df = dc_to_df.unstack(level=1) 
dc_to_df.columns = dc_to_df.columns.droplevel(0) 
desired_df = dc_to_df 

答えて

1

ですか?

input_df 
     earnings costs 
t1 S1  150.0 150.00 
    S2  25.0 12.50 
t2 S1  80.0 36.36 
    S2  40.0 22.72 

input_df.groupby(level=0).sum() 
    earnings costs 
t1  175.0 162.50 
t2  120.0 59.08 

上記の出力を新しいデータフレームに割り当てることができます。

EDIT:出力を確認した後、実際にはlevel=0にグループ化されています。

+1

もう少し良い方法があります: 'input_df.sum(level = 0)' ;-) – MaxU

関連する問題