2016-12-06 1 views
0

다음과 같은 정보가 있습니다 : areaIdareaNo. 그러나 나는 내가 매트릭스를 필요, 내가 groupby을 사용하여 각 영역에 대한 areaIds의 수를 얻을 수 있었다팬더를 사용하여 집계 된 행렬을 만듭니다.

  01  02  03 
a1  1  2  0 
b1  0  0  2 
b2  1  0  0 

자신의 집계 값

areaId       areaNo 
a1         01 
a1         02 
a1         02 
b1         03 
b1         03 
b2         01 
b2         03 

원하는 매트릭스와 매트릭스를 만들려고하고 있습니다.

grouped = df.groupby('areaId') 

df2 = pd.DataFrame({ 
    'areaId': grouped['areaNo'].size().index, 
    'nrArea': grouped['areaId'].nunique(), 
}) 

어떻게 얻을 수 있습니까?

답변

1

당신은 pd.crosstab

In [82]: df 
Out[82]: 
    areaId areaNo 
0  a1  1 
1  a1  2 
2  a1  2 
3  b1  3 
4  b1  3 
5  b2  1 
6  b2  3 

In [83]: pd.crosstab(df['areaId'], df['areaNo']) 
Out[83]: 
areaNo 1 2 3 
areaId 
a1  1 2 0 
b1  0 0 2 
b2  1 0 1 

를 사용하거나 사용할 수 pd.pivot_table

In [87]: pd.pivot_table(df, index='areaId', columns='areaNo', aggfunc=len, fill_value=0) 
Out[87]: 
areaNo 1 2 3 
areaId 
a1  1 2 0 
b1  0 0 2 
b2  1 0 1 

또는 groupbyunstack

In [88]: df.groupby(['areaId', 'areaNo']).size().unstack('areaNo').fillna(0) 
Out[88]: 
areaNo 1 2 3 
areaId 
a1  1.0 2.0 0.0 
b1  0.0 0.0 2.0 
b2  1.0 0.0 1.0 
를 사용하여
관련 문제