2016-08-29 5 views
1

Ich verwende groupby in pandas, um einige json Stildaten zu erstellen. Ich habe Probleme mit über den gruppierten dataframe Iterieren, da es nicht meine Schlüssel erkenntIterating über einen Pandas gruppierten Datenrahmen

import pandas as pd 


df = pd.DataFrame(data=[['Group A', 10], 
         ['Group A', 12], 
         ['Group B', 22], 
         ['Group B', 25], 
         ['Group B', 26]], 
        columns = ['Group', 'Value']) 

df = df.groupby('Group').agg(['mean', 'count']).reset_index() 

json_data = [{'id': row['Group'], 
       'name': row['Group'], 
       'value': row['mean']} for index, row in df.iteritems()] 
print json_data 

Fehler:

KeyError: 'Group' 

gewünschte Ausgabe:

[{ 
    'id': 'Group A', 
    'name': 'Group A', 
    'value': 11 
}, { 
    'id': 'Group B', 
    'name': 'Group B', 
    'value': 24.33333 
    }] 

Antwort

1

Try this: Hier ist ein Link zu DataFrame.to_json()

df = df.groupby('Group').mean().reset_index().rename(columns = {'Group':"id" }) 
df['name'] = df['id'] 
df.to_json(orient="records") 

'[{"id":"Group A","Value":11.0,"name":"Group A"},{"id":"Group B","Value":24.3333333333,"name":"Group B"}]' 

Sie können die JSON Ausgabe nachbestellen auf diese Weise:

df[['id','name', 'Value', ]].to_json(orient="records") 

'[{"id":"Group A","name":"Group A","Value":11.0},{"id":"Group B","name":"Group B","Value":24.3333333333}]' 
1

Als documented, iteritems iteriert über die Spalten (insbesondere Name/Spaltenpaare). Es sieht so aus, als ob Sie wollen iterrows. (Sie werden es noch ändern müssen ['Value', 'mean'] zugreifen, anstatt ['mean'], weil Sie einen Datenrahmen mit multiindexed Spalten erstellt.)

+0

Danke, ich war mir nicht sicher, wie man '' mean' 'bezieht. Das bedeutet Sinn als '[' Value ',' mean ']', aber die 'Group'-Spalte hat kein Label, wie wird darauf verwiesen? – user2242044

+0

@ user2242044: Was meinst du mit "hat kein Label"? Auf die Spalte "Group" kann direkt mit '[" Group "]' zugegriffen werden, wie Sie es bereits tun, da es keine zusätzlichen Indexstufen darunter hat. – BrenBarn

+0

@BrenBam, mit 'row ['Group']' scheint das gesamte Datenfeld hinzuzufügen 'Gruppe Name: 0, dtype: Objekt,' – user2242044

Verwandte Themen