Skip to main content
 首页 » 编程设计

python之Pandas groupby date month 并在几个月内计算项目

2025年05月04日22落叶

我有一个这样的数据框:

STYLE | INVOICE_DATE2 
A     | 2017-01-03 
B     | 2017-01-03 
C     | 2017-01-03 
A     | 2017-02-03 
A     | 2017-01-03 
B     | 2017-02-03 
B     | 2017-01-03 

我正在尝试按月对它们进行分组并在月内对其进行计数,结果必须如下所示:

Month | Item | Count 
1     | A    | 2 
      | B    | 2 
      | C    | 1 
2     | A    | 1 
      | B    | 1 

我试过这个:

lastyear_df.groupby([(df['INVOICE_DATE2']).dt.month, df['STYLE']])['STYLE'].count() 

但它对我不起作用。

请您参考如下方法:

这是一条单线...

ans = df.groupby([df.INVOICE_DATE2.apply(lambda x: x.month), 'STYLE']).count() 

这是输出

In [21]: ans 
Out[21]: 
                     INVOICE_DATE2 
INVOICE_DATE2 STYLE 
1             A                  2 
              B                  2 
              C                  1 
2             A                  1 
              B                  1 

注意:此时您有一个分层索引,您可以使用 reset_index

将其展平
ans = ans.reset_index(1) 
              STYLE  INVOICE_DATE2 
INVOICE_DATE2 
1                 A              2 
1                 B              2 
1                 C              1 
2                 A              1 
2                 B              1 

您现在可以根据需要更改列名和索引名:

ans.index.name = 'MONTH' 
ans.columns = ['ITEM', 'COUNT']