2017-01-31 1 views
1

제 질문은 the other question의 솔루션과 관련되어 있습니다. 어떻게 bin 크기를 3에서 5 또는 10으로 변경할 수 있을지 궁금합니다. 내가 step을 변경하면 충분하지 않습니다. (str(int(cat[1:3])) + "-" + str(int(cat[5:7])-1)도 변경해야하지만 이것은 할 수없는 일입니다. ValueError: invalid literal for int() with base 10: '18, ' 오류가 나타납니다.범위별로 데이터를 그룹화 할 때 저장소 크기를 변경하는 방법은 무엇입니까?

step=3 
kwargs = dict(include_lowest=True, right=False) 
bins = pd.cut(df.AVG_PERCENT_EVAL_1, bins=np.arange(18,40+step,step), **kwargs) 
labels = [(str(int(cat[1:3])) + "-" + str(int(cat[5:7])-1)) for cat in bins.cat.categories] 
bins.cat.categories = labels 

df = df.assign(AVG_PERCENT_RANGE=bins).drop("AVG_PERCENT_EVAL_1", axis=1) 
df.groupby(['GROUP', 'AVG_PERCENT_RANGE'], as_index=False).agg('mean') 

답변

1

이게 원하는가요?

In [166]: %paste 
step=5 
kwargs = dict(include_lowest=True, right=False) 
bins=np.arange(18,40+step,step) 
labels = ['{}-{}'.format(i, i+step-1) for i in bins][:-1] 

df['AVG_PERCENT_RANGE'] = pd.cut(df.pop('AVG_PERCENT_EVAL_1'), 
           bins=bins, labels=labels, **kwargs) 
df.groupby(['GROUP', 'AVG_PERCENT_RANGE'], as_index=False).agg('mean') 
## -- End pasted text -- 
Out[166]: 
    GROUP AVG_PERCENT_RANGE AVG_PERCENT_NEGATIVE AVG_TOTAL_WAIT_TIME AVG_TOTAL_SERVICE_TIME 
0 AAAAA    18-22    6.500000   85.682099    247.880659 
1 AAAAA    23-27    0.833333   103.445112    314.336474 
2 AAAAA    28-32     NaN     NaN      NaN 
3 AAAAA    33-37     NaN     NaN      NaN 
4 AAAAA    38-42     NaN     NaN      NaN 
5 BBBBB    18-22    0.777778   63.500619    242.510146 
6 BBBBB    23-27    2.000000   103.796290    313.685358 
7 BBBBB    28-32     NaN     NaN      NaN 
8 BBBBB    33-37     NaN     NaN      NaN 
9 BBBBB    38-42     NaN     NaN      NaN 
+0

감사합니다. 그래서 나는 빈 크기를 바꾸기 위해서'step' 만 바꾸어야 만합니까? – Dinosaurius

+0

@Dinosaurius, 네, 시도 해보세요. – MaxU

관련 문제