将 pandas groupby/聚合结果转换为 dataframe

Transform pandas groupby / aggregate result to dataframe

使用以下方法对数据进行分组和聚合后:

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     .  
   .              .         .         .         .     .      
   .              .         .         .         .     .   

任何人都可以指导我如何实现这一目标吗?谢谢。

这将为您提供数据框

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

编辑:

您可以使用

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

假设您有以下 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

得到数据框的结果后(A-Za-z给出的答案),你只需要这个代码:

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