python - 每月、每年分组的值计数 - Pandas

标签 python pandas group-by count transform

我正在尝试对特定输出中每月和每年的日期进行groupby 计数。我可以每天做,但不能每月/每年获得相同的输出。

d = ({
    'Date' : ['1/1/18','1/1/18','2/1/18','3/1/18','1/2/18','1/3/18','2/1/19','3/1/19'],                 
    'Val' : ['A','B','C','D','A','B','C','D'],                                      
     })

df = pd.DataFrame(data = d)

df['Date'] = pd.to_datetime(df['Date'], format= '%d/%m/%y')

df['Count_d'] = df.Date.map(df.groupby('Date').size())

这是我想要的输出:

        Date Val  Count_d
0 2018-01-01   A        2
1 2018-01-01   B        2
2 2018-01-02   C        1
3 2018-01-03   D        1
4 2018-02-01   A        1
5 2018-03-01   B        1
6 2019-01-02   C        1
7 2019-01-03   D        1

当我尝试做类似但每月和每年我使用以下内容时:

df1 = df.groupby([df['Date'].dt.year.rename('year'), df['Date'].dt.month.rename('month')]).agg({'count'})
print(df)

但是输出是:

            Date   Val
           count count
year month            
2018 1         4     4
     2         1     1
     3         1     1
2019 1         2     2

预期输出:

        Date Val  Count_d Count_m Count_y
0 2018-01-01   A        2       4       6
1 2018-01-01   B        2       4       6
2 2018-01-02   C        1       4       6
3 2018-01-03   D        1       4       6
4 2018-02-01   A        1       1       6
5 2018-03-01   B        1       1       6
6 2019-01-02   C        1       2       2
7 2019-01-03   D        1       2       2

最佳答案

使用GroupBy.transform对于与原始 DataFrame 具有相同大小的列:

df['Date'] = pd.to_datetime(df['Date'], format= '%d/%m/%y')
y = df['Date'].dt.year
m = df['Date'].dt.month

df['Count_d'] = df.groupby('Date')['Date'].transform('size')
df['Count_m'] = df.groupby([y, m])['Date'].transform('size')
df['Count_y'] = df.groupby(y)['Date'].transform('size')

print(df)
        Date Val  Count_d  Count_m  Count_y
0 2018-01-01   A        2        4        6
1 2018-01-01   B        2        4        6
2 2018-01-02   C        1        4        6
3 2018-01-03   D        1        4        6
4 2018-02-01   A        1        1        6
5 2018-03-01   B        1        1        6
6 2019-01-02   C        1        2        2
7 2019-01-03   D        1        2        2

关于python - 每月、每年分组的值计数 - Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55726107/

相关文章:

sql - 对于 SQL,如何使用 group by 两次但仅在第二组内按 sum() 排序

python - OpenCV:将不规则形状轮廓内部设置为颜色

python - if 语句的语法无效

python - 从数据中查找峰值

python - 具有完整性要求的按频率分类的 Pandas Grouper

python - 通过添加另一列来对我的 pandas 数据框中的重复项进行排序

python - pd.NamedAgg 中的矢量化百分位数

python - 在 Pandas 中按周分组

sql - 如何将 INNER JOIN 与 GROUP BY 子句结合使用?

python - 如何在 Python 中从语料库创建词云?