2017-03-09 1 views
0

Après le regroupement et l'agrégation des données en utilisant:Transformer résultat pandas géants groupby/total à dataframe

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

Je reçois un résultat similaire comme suit:

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 

Étant donné que les résultats sont de série et non dataframe , Je ne peux pas le transformer en un dataframe qui ressemble à ceci:

   11   12  113  118  . 

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

Quelqu'un peut-il me guider comment atteindre t le sien? Tks.

Répondre

1

en supposant que vous avez les Pandas.Series suivants:

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 

vous pouvez faire pivoter comme suit:

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 
1

Cela vous donnera la dataframe

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

EDIT:

Vous pouvez convertir la trame de données à l'aide de la matrice

result.as_matrix() 
+0

Great stuff, TKS! Et avez-vous une idée de comment puis-je transformer le dataframe résultant en une matrice (comme l'exemple)? – PAstudilloE

+0

résultat.as_matrix() – Vaishali

0

Après avoir obtenu les résultats en tant que trame de données (réponse donnée par A-Za-z), il vous suffit de ce code:

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