将 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')
使用以下方法对数据进行分组和聚合后:
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')