使用 Pandas 创建聚合矩阵
Create a aggregated matrix using Pandas
我有以下 areaId
和 areaNo
信息。我正在尝试用它们的聚合值创建一个矩阵
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
或使用 groupby
和 unstack
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
我有以下 areaId
和 areaNo
信息。我正在尝试用它们的聚合值创建一个矩阵
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
或使用 groupby
和 unstack
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