2016-11-22 5 views
2

의 난이 dataframe 있다고 가정 해 봅시다 : pd.crosstab열 변수의 여러 값 빈도를 표시하는 pandas 크로스 탭으로 교차 표를 얻는 방법은 무엇입니까?

df = pd.DataFrame(np.random.randint(0,5, size=(5,6)), columns=list('ABCDEF')) 

교차 변수를하는 것은 간단하다 :

table = pd.crosstab(index=df['A'], columns=df['B']) 

수익률 : 나는 예를 들어 다음과 같이 테이블을 원할 것

B 1 2 3 4 
A    
0 1 0 0 0 
1 0 0 0 1 
2 0 1 1 0 
3 0 1 0 0 

:

B (1+2+3) 1 2 3 4 
A    
0  1 1 0 0 0 
1  0 0 0 0 1 
2  2 0 1 1 0 
3  1 0 1 0 0 

누구나 나를 올바른 길로 인도 할 수 있습니까?

+1

가 가지게되는 좋은 답변이 있습니다. 그러나, 나는 무엇이 원하는지 이해하기 위해 고심하고있다. 귀하의 예를 간소화하고 귀하가보기를 기대하는 것을 보여주십시오. 그것은 우리가 당신의 논리를 볼 수 있도록 당신 스스로를 수동으로 계산해야한다는 것을 의미합니다. – piRSquared

+0

나는 내 질문을 업데이트했다. – pasitrauk

답변

2

sum을 하위 집합으로 사용하십시오. 그러나 작은 임의의 df를 사용하면 항상 다른 값을 얻게되므로 문제가 될 수 있으므로 열의 값이 달라집니다. np.random.seed(100)을 사용하면 내 답변과 동일한 테스트 결과가 표시됩니다.

table['(1+2+3)'] = table[[1,2,3]].sum(axis=1) 

샘플 :

np.random.seed(100) 
df = pd.DataFrame(np.random.randint(0,5, size=(5,6)), columns=list('ABCDEF')) 
table = pd.crosstab(index=df['A'], columns=df['B']) 
table['(1+2+3)'] = table[[1,2,3]].sum(axis=1) 
print (table) 
B 0 1 2 3 4 (1+2+3) 
A       
0 1 0 0 0 1  0 
1 0 0 0 1 0  1 
2 0 0 1 0 0  1 
3 0 1 0 0 0  1 
+0

고마워, 정확히 내가 무엇을 찾고 있었는지! – pasitrauk