2016-08-31 2 views
3

에 나는이 형식으로 Dataframe을했습니다 :카운트 발행 수는 DataFrame

| Department | Person | Power | ... | 
|------------|--------|--------|-----| 
| ABC  | 1234 | 75 | ... | 
| ABC  | 1235 | 25 | ... | 
| DEF  | 1236 | 50 | ... | 
| DEF  | 1237 | 100 | ... | 
| DEF  | 1238 | 25 | ... | 
| DEF  | 1239 | 50 | ... | 

은 내가 지금 싶어하는 전원 열의 각 값에 대한 발행 수의 합계입니다. 내 DataFrame에서 어떻게 가져올 수 있습니까?

| Department | 100 | 75 | 50 | 25 | 
|------------|-----|-----|-----|-----| 
| ABC  | 0 | 1 | 0 | 1 | 
| DEF  | 1 | 0 | 2 | 1 | 
+1

을, 당신은 – Jason

답변

4

당신은 sort_indexvalue_counts을 사용할 수 있습니다, 다음 T에 의해 to_frame 마지막으로 전치에 의해 DataFrame을 생성 : 코멘트에 의해

print (df.Power.value_counts().sort_index(ascending=False).to_frame().T) 
     100 75 50 25 
Power 1 1 2 2 

편집 :

print (pd.crosstab(df.Department, df.Power).sort_index(axis=1, ascending=False)) 
Power  100 75 50 25 
Department      
ABC   0 1 0 1 
DEF   1 0 2 1 
:

당신은 crosstab 필요 빠른

groupbyunstack 또 다른 솔루션 :

필요 열 Department에 의해 groupbyPerson이, 제 2 위치로 groupby에 열 Person을 추가하면
print (df.groupby(['Department','Power']) 
     .size() 
     .unstack(fill_value=0) 
     .sort_index(axis=1, ascending=False)) 

Power  100 75 50 25 
Department      
ABC   0 1 0 1 
DEF   1 0 2 1 

(당신에게 감사 piRSquared) : 코멘트에 의해

print (df.groupby(['Department','Person', 'Power']) 
     .size() 
     .unstack(fill_value=0) 
     .sort_index(axis=1, ascending=False)) 

Power    100 75 50 25 
Department Person      
ABC  1234  0 1 0 0 
      1235  0 0 0 1 
DEF  1236  0 0 1 0 
      1237  1 0 0 0 
      1238  0 0 0 1 
      1239  0 0 1 0 

EDIT1 :

다른 누락 값을 추가해야하는 경우 reindex을 사용하십시오. :

print (df.groupby(['Department','Power']) 
     .size() 
     .unstack(fill_value=0) 
     .reindex(columns=[100,75,50,25,0], fill_value=0)) 

Power  100 75 50 25 0 
Department       
ABC   0 1 0 1 0 
DEF   1 0 2 1 0 
+0

감사를 검색 단지 수 있었다, 그리고 나는이 있다면 나는 그것을 어떻게 할 수 결과를 그룹화 할 두 번째 열은 무엇입니까? – Gerrit

+0

원하는 출력을 추가 할 수 있습니까, 미안 해요, 나는'결과를 그룹화 '한다는 것을 이해하지 못합니다. – jezrael

+0

고마워, 나는 2 개의 해결책을 추가한다. 그것을 확인하십시오. – jezrael

1

또는이 방법을 수행 할 수 있습니다 :이 질문은 많은 시간 전에 요청 된

>>> df.groupby(['Department','Power']).count().unstack().fillna(0) 

      Person    
Power   25 50 75 100 
Department      
ABC   1.0 0.0 1.0 0.0 
DEF   1.0 2.0 0.0 1.0