跨列计算值,然后按年份对熊猫进行分组

时间:2020-10-25 09:48:07

标签: python pandas

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(),但是没有用。我不确定接下来要尝试什么。我认为它不适合交叉制表。

1 个答案:

答案 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)