我有一个数据帧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
答案 0 :(得分:5)
您可以使用pd.crosstab
:
(pd.crosstab([df.Name, df.title], df.freq, colnames=[''])
.rename(columns="freq_{}".format).reset_index())
答案 1 :(得分:5)
快速回答
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