使用 Pandas 创建聚合矩阵

Create a aggregated matrix using Pandas

我有以下 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 获取每个区域的 areaId 数量,但是我需要一个矩阵。

 grouped = df.groupby('areaId')

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

我怎样才能得到这个?

你可以使用 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