将pandas groupby / aggregate结果转换为dataframe

时间:2017-03-09 22:22:34

标签: python pandas matrix dataframe series

使用以下方法对数据进行分组和汇总:

byExpImp = data.groupby(['Exporter', 'Importer','sitc4'])
result = byExpImp['Value'].aggregate(np.sum)

我得到的结果如下:

Exporter     Importer  sitc4

Afghanistan  World     11           59.0
                       12          892.0
                       113          19.0
Austria      World     11           41.0
                       113           8.0
                       118           4.0

Name: Value, dtype: float64

由于结果是系列而不是数据帧,我无法将其转换为如下所示的数据框:

                11         12       113       118     . 

Afghanistan    59.0     892.0      19.0         0     .
Austria        41.0         0       8.0       4.0     .  
   .              .         .         .         .     .      
   .              .         .         .         .     .   

任何人都可以指导我如何实现这一目标吗?韩国社交协会。

3 个答案:

答案 0 :(得分:1)

这将为您提供数据框

result = data.groupby(['Exporter', 'Importer','sitc4']).Value.sum().reset_index() 

编辑:

您可以使用

将数据框转换为矩阵
result.as_matrix()

答案 1 :(得分:1)

假设您有以下Pandas.Series:

In [227]: result
Out[227]:
Exporter     Importer  sitc4
Afghanistan  World     11        59.0
                       12       892.0
                       113       19.0
Austria      World     11        41.0
                       113        8.0
                       118        4.0
Name: val, dtype: float64

您可以按如下方式进行转播:

In [228]: (result.reset_index(name='Value')
     ...:        .pivot_table(index='Exporter', columns='sitc4', values='Value',
     ...:                     aggfunc='sum', fill_value=0)
     ...: )
     ...:
Out[228]:
sitc4        11   12   113  118
Exporter
Afghanistan   59  892   19    0
Austria       41    0    8    4

答案 2 :(得分:0)

将结果作为数据框获得后(答案由A-Za-z给出),您只需要这段代码:

result.pivot(index='Exporter', columns='sitc4', values='Value')