我有df,如下所示。
df
ID Type Status Age
1 2 P 23
2 1 P 28
3 1 F 33
4 3 P 48
5 1 F 23
6 2 P 28
7 2 F 23
8 3 P 38
从上面我想基于Status
来对Type
进行分组计数
预期输出:
Type Status Frequency
1 F 2
1 P 1
2 F 1
2 P 2
3 F 0
3 P 2
我尝试了以下代码
df.groupby('Type').agg('Status': 'size').\
sort_values(ascending = False).reset_index()
答案 0 :(得分:2)
我认为您想要value_counts
:
df.groupby('Type').Status.value_counts().reset_index(name='Frequency')
输出:
Type Status Frequency
0 1 F 2
1 1 P 1
2 2 P 2
3 2 F 1
4 3 P 2
或将reset_index
替换为unstack
以获取缺少的组:
df.groupby('Type').Status.value_counts().unstack(fill_value=0)
输出:
Status F P
Type
1 2 1
2 1 2
3 0 2
注意:df.groupby('Type').Status.value_counts()
等效于df.groupby(['Type,'Status']).size()
。
答案 1 :(得分:1)
让我们尝试crosstab
pd.crosstab(df.Type, df.Status)
Out[268]:
Status F P
Type
1 2 1
2 1 2
3 0 2
pd.crosstab(df.Type, df.Status).stack().reset_index(name = 'freq')
Out[273]:
Type Status freq
0 1 F 2
1 1 P 1
2 2 F 1
3 2 P 2
4 3 F 0
5 3 P 2