在熊猫数据框中按日期和计数值分组

Posted

技术标签:

【中文标题】在熊猫数据框中按日期和计数值分组【英文标题】:Group by date and count values in pandas dataframe 【发布时间】:2020-10-22 07:22:45 【问题描述】:

我有以下 pandas 数据框(我正在使用 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

两种解决方案对我来说都同样适用。

【问题讨论】:

【参考方案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

【讨论】:

【参考方案2】:

我们可以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

【讨论】:

【参考方案3】:

.agg() 函数中使用value_counts

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

【讨论】:

以上是关于在熊猫数据框中按日期和计数值分组的主要内容,如果未能解决你的问题,请参考以下文章

熊猫日期时间组

如何在熊猫中按值计数对列进行排序

在熊猫数据框中按 MinMaxScaler 分组

无法在熊猫数据框中按时间戳索引

熊猫数据框列的分组和计数

如何在 Pandas 数据框中按列值分组