我现在已经在这个问题上敲了一段时间,并且无法理解它......
我有两个Pandas Dataframe df1
和df2
,其中包含我想要整齐地汇总成一个的信息。
到目前为止,我使用了一个聚合函数来总结每个函数,如下所示:
aggregation = {'A' : {'a' : 'mean'}, 'B' : {'b' : 'mean'}, 'C' : {'c' : 'sum'}}
>> df1.groupby(by=['LEVEL_1']).agg(aggregation)
A B C
a b c
LEVEL_1
lvl_a 1.0 2.0 3.0
lvl_b 4.0 5.0 6.0
lvl_c 7.0 8.0 9.0
与我的其他DataFrame相同
>> df2.groupby(by=['LEVEL_1']).agg(aggregation)
A B C
a b c
LEVEL_1
lvl_a 10.0 11.0 12.0
lvl_b 13.0 14.0 15.0
lvl_c 16.0 17.0 18.0
现在,我想将这两个组合成一个整体的DataFrame,其中我的列被分组为两个"信息Universe",另外一行totals
,这就是平均值每列的所有行,如下所示:
a b c
df1 df2 df1 df2 df1 df2
LEVEL_1
lvl_a 1.0 10.0 2.0 11.0 3.0 12.0
lvl_b 4.0 13.0 5.0 14.0 6.0 15.0
lvl_c 7.0 16.0 8.0 17.0 9.0 18.0
totals 4.0 13.0 5.0 14.0 6.0 15.0
很可能,有一种超级方式可以做到这一点,但我还没想出来......
先谢谢你们。
答案 0 :(得分:1)
我认为您需要concat
+ droplevel
+ swaplevel
s=pd.concat([df1,df2],axis=1,keys=['df1','df2'])
s.columns=s.columns.droplevel(1)
s=s.swaplevel(0,1,axis=1).sort_index(axis=1)
s
Out[473]:
a b c
df1 df2 df1 df2 df1 df2
lvl_a 1.0 1.0 2.0 2.0 3.0 3.0
lvl_b 4.0 4.0 5.0 5.0 6.0 6.0
lvl_c 7.0 7.0 8.0 8.0 9.0 9.0
更新
pd.concat([s,s.sum().to_frame('total').T])
Out[479]:
a b c
df1 df2 df1 df2 df1 df2
lvl_a 1.0 1.0 2.0 2.0 3.0 3.0
lvl_b 4.0 4.0 5.0 5.0 6.0 6.0
lvl_c 7.0 7.0 8.0 8.0 9.0 9.0
total 12.0 12.0 15.0 15.0 18.0 18.0