2017-05-26 59 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

相关问题