1 2 3 4 year
a h f h 2000
r r f h 2000
h y g h 2001
h i g e 2004
g f g b 2006
g d g v 2006
大熊猫中是否有一种方法可以按年份对每个值的频率求和?
我尝试了stack()和groupby(),但是没有用。我不确定接下来要尝试什么。我认为它不适合交叉制表。
答案 0 :(得分:4)
使用DataFrame.melt
取消GroupBy.size
的显示:
df = df.melt(id_vars='year').groupby(['year','value']).size().reset_index(name='count')
print (df)
year value count
0 2000 a 1
1 2000 f 2
2 2000 h 3
3 2000 r 2
4 2001 g 1
5 2001 h 2
6 2001 y 1
7 2004 e 1
8 2004 g 1
9 2004 h 1
10 2004 i 1
11 2006 b 1
12 2006 d 1
13 2006 f 1
14 2006 g 4
15 2006 v 1
您的解决方案应更改:
df1 = (df.set_index('year')
.stack()
.groupby(level=0)
.value_counts()
.rename_axis(['year','value'])
.reset_index(name='count'))
print (df1)