2014-09-10 2 views
1

d3.js 그래픽에서 작업 중입니다. 내 데이터는 거대한 멀티탭 .xls에 있습니다. 각 탭에서 데이터를 가져와야하므로 팬더에 모두 덤프하고 일부 .json을 내보내는 작업을 결정했습니다. 여러 탭에 분산pandas groupby to nested 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") 

내가 거의 다 왔으므로 각 상태가 부모가되도록 내보내려면 어떻게해야합니까?

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

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

답변

4

카운트 방법은 (각 그룹의 크기는 1, 무 NaN이 없다) 여기있는 모든 일이야 따라서 왜, 각 열의 각 그룹에 대한 비 NaN이 항목의 수를 계산합니다.
는 (I 특정 링크를 찾을 수 있지만, 그것은 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

후후! 그것은 엑셀과 같습니다. 하나는 add - 어떤 이유에서든 'rate'을 유형 객체로 보았을 때 뜨는 것이 아니라 떠 다니는 것입니다. 그것은 나에게 "집계 할 숫자 타입 없음"오류를 주었다. 그래서 나는 그것을 float으로 변환했다 : df.convert_objects ('rate', convert_numeric = True) – Maggie

+3

"Excel과 같아서 멋지다." 화려한 따옴표! –