2016-08-29 29 views
1

我在pandas中使用groupby創建了一些json樣式數據。我無法遍歷分組dataframe,因爲它不承認我的鑰匙對Pandas分組數據幀進行迭代

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 

錯誤:

KeyError: 'Group' 

所需的輸出:

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

回答

1

試試這個:下面是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"}]' 

一個鏈接,您可以重新排序JSON輸出這樣:

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

由於documentediteritems遍歷的列(特別是名稱/列對)。它看起來像你想iterrows。 (您仍然需要去改變它來訪問['Value', 'mean']而非['mean'],因爲你創建了multiindexed列的數據幀。)

+0

謝謝,我不知道如何引用''mean''。這意味着感覺就像'['Value','mean']',但是'Group'列沒有標籤,那是如何引用的? – user2242044

+0

@ user2242044:「沒有標籤」是什麼意思?您可以直接使用'[「Group」]'訪問「Group」列,因爲它已經沒有額外的索引級別。 – BrenBarn

+0

@BrenBam,使用'row ['Group']'似乎在添加整個數據幀'Group A Name:0,dtype:object,' – user2242044