按日期分组并统计熊猫数据框中的值

时间:2020-07-01 19:01:20

标签: pandas dataframe sorting group-by count

我有以下熊猫数据框(我正在使用python):

import pandas as pd

df = pd.DataFrame({
'date': ['2020-07-01', '2020-07-01', '2020-07-01', '2020-07-01', '2020-07-02', '2020-07-02', '2020-07-02'],
'value': ['abc', 'abc', 'abc', 'bb', 'bb', 'bb', 'c']})

df.head(7)

    date    value
0   2020-07-01  abc
1   2020-07-01  abc
2   2020-07-01  abc
3   2020-07-01  bb
4   2020-07-02  bb
5   2020-07-02  bb
6   2020-07-02  c

我怎么得到这个:

    date    value  count
0   2020-07-01  abc  3
1   2020-07-01  bb   1
2   2020-07-02  bb   2
3   2020-07-02  c    1

或者这个:

    date    value  count
0   2020-07-01  abc  3
                bb   1
1   2020-07-02  bb   2
                c    1

这两种解决方案对我来说都很好。

3 个答案:

答案 0 :(得分:1)

尝试一下:

df2 = df.groupby(by = ['date','value'])['value'].count().to_frame(name='count')

结果:

                  count
date       value       
2020-07-01 abc        3
           bb         1
2020-07-02 bb         2
           c          1

或:

df2 = df.groupby(by = ['date','value'])['value'].count().to_frame(name='count').reset_index()

给出:

         date value  count
0  2020-07-01   abc      3
1  2020-07-01    bb      1
2  2020-07-02    bb      2
3  2020-07-02     c      1

答案 1 :(得分:1)

我们可以做value_counts

s=df.groupby('date').value.value_counts().to_frame('count')
                  count
date       value       
2020-07-01 abc        3
           bb         1
2020-07-02 bb         2
           c          1

答案 2 :(得分:1)

value_counts函数中使用.agg()

df.groupby('date').agg(count=('value', 'value_counts')).reset_index()



     date value  count
0  2020-07-01   abc      3
1  2020-07-01    bb      1
2  2020-07-02    bb      2
3  2020-07-02     c      1