计算 Pandas 中条件行中的值频率
counting value frequency in conditional rows in Pandas
我有一个数据框 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 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
我有一个数据框 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 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