2016-12-06 11 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 
を使用して
関連する問題