2014-09-10 36 views
1

我正在研究d3.js圖形。我的數據是一個巨大的多選項.xls。我必須從每個標籤中獲取數據,因此我決定將所有數據轉儲到熊貓並導出一些.json文件。pandas groupby嵌套json - 不想計算字段

原始數據,在許多標籤流傳:

demography, area, state, month, rate 
over 65, region2, GA, May, 23 
over 65, region2, AL, May, 25 
NaN, random_odd_data, mistake, error 
18-65, region2, GA, 77 
18-65, region2, AL, 75 

現在,擺在熊貓,合併和清理:

 demography area  state month rate 
0 over 65 region2 GA  May 23 
1 over 65 region2 AL  May 25 
2 18-65  region2 GA  May 50 
3 18-65  region2 AL  May 55 

現在,集團就

group = df.groupby(['state', 'demography']) 

產量

<pandas.core.groupby.DataFrameGroupBy object at 0x106939610> 

嘗試這樣的:

group = df.groupby(['state', 'demography']).count() 

得到的東西幾乎是正確的,但我不想算什麼,我只是想「速度」

state demography area month rate 
AL  over 65  1  1  1 
     18-65  1  1  1 
GA  over 65  1  1  1 
     18-65  1  1  1 

果然,這隻能出口「1」對於每個值,lol:

group.reset_index().to_json("myjson2.json", orient="index") 

dang我幾乎在那裏,我如何導出它,使每個國家是父母?

[ 
    { 
     "state": "Alabama", 
     "over 65": 25, 
     "18-65": 50 

    }, 
    { 
     "state": "Georgia", 
     "over 65": 23, 
     "18-65": 55 
    } 
] 

回答

4

計數方法計算非NaN的條目數爲每個組中的每一列,因此爲什麼他們都在這裏1(每個組的大小爲1,有沒有NaN的)。
(我無法找到一個特定的鏈接,但它在the groupby docs提及。)


我想你真正想要的是一個pivot_table

In [11]: res = df.pivot_table('rate', 'state', 'demography') 

In [12]: res 
Out[12]: 
demography 18-65 over65 
state 
AL    55  25 
GA    50  23 

我想你」重新尋找orient='records'(您首先需要reset_index):

In [13]: res.reset_index().to_json(orient='records') 
Out[13]: '[{"state":"AL","18-65":55,"over65":25},{"state":"GA","18-65":50,"over65":23}]' 
+3

喔!這就像Excel一樣,只是很酷。一個增加 - 無論出於什麼原因,它看到「速度」作爲類型對象,而不是浮動。它給了我錯誤「沒有數字類型來聚合」。所以我hadda轉換它爲浮動:df.convert_objects('rate',convert_numeric = True) – Maggie 2014-09-10 20:18:02

+3

「這就像Excel,只有很酷。」輝煌的報價! – 2014-09-10 20:37:31