2017-05-26 99 views
0

如何計算(例如)多索引DataFrame級別= 1的和,並將結果存儲在新的DataFrame中,如從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) 

煩瑣方式

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 

您可以將上述輸出分配給新的數據框。

編輯:看完你的輸出後,你實際上是在level=0上分組。

+1

有一個更好的選擇:'input_df.sum(level = 0)';-) – MaxU

相關問題