使用Pandas创建聚合矩阵

时间:2016-12-06 17:38:50

标签: pandas matrix aggregate divide

我有以下areaIdareaNo信息。我正在尝试创建一个带有聚合值的矩阵

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

所需矩阵

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

我能够使用groupby获取每个区域的areaIds数量,但我需要一个矩阵。

 grouped = df.groupby('areaId')

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

我怎样才能获得这个?

1 个答案:

答案 0 :(得分: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