Python 熊猫中条件行中的计数值频率
我有一个数据帧df,如:Python 熊猫中条件行中的计数值频率,python,pandas,dataframe,count,pandas-groupby,Python,Pandas,Dataframe,Count,Pandas Groupby,我有一个数据帧df,如: Name title freq A k1 1 A k1 1 A k1 2 A k1 2 A k1 2 M k1 1 M k1 1 M k1 1 M k1 2 M k1 2 M k1 2 M k1 2 A k2 1 A k2 1 A k2 1 A k
Name title freq
A k1 1
A k1 1
A k1 2
A k1 2
A k1 2
M k1 1
M k1 1
M k1 1
M k1 2
M k1 2
M k1 2
M k1 2
A k2 1
A k2 1
A k2 1
A k2 2
A k2 2
A k2 2
A k2 2
M k2 1
M k2 1
M k2 1
M k2 1
M k2 1
M k2 2
M k2 2
M k2 2
M k2 2
M k2 2
M k2 2
我想创建一个输出,如:
title name freq_1 freq_2
k1 A 2 3
k1 M 3 4
k2 A 3 4
k2 M 5 6
我试过:
df.groupby(['title','name','freq']).size().reset_index(name='Number'))
输出与我想要的有点不同:
title name freq Number
0 k1 A 1 2
1 k1 A 2 3
2 k1 M 1 3
3 k1 M 2 4
4 k2 A 1 3
5 k2 A 2 4
6 k2 M 1 5
7 k2 M 2 6
您可以使用
pd.crosstab
:
(pd.crosstab([df.Name, df.title], df.freq, colnames=[''])
.rename(columns="freq_{}".format).reset_index())
快速回答
df.groupby(['Name', 'title', 'freq']).size().unstack()
freq 1 2
Name title
A k1 2 3
k2 3 4
M k1 3 4
k2 5 6
再加一点格式
df.groupby(['Name', 'title', 'freq']).size().unstack() \
.rename(columns='freq_{}'.format).rename_axis(None, 1).reset_index()
Name title freq_1 freq_2
0 A k1 2 3
1 A k2 3 4
2 M k1 3 4
3 M k2 5 6