如何在Pandas数据框架中按季度分组(附实例)

1,040 阅读2分钟

你可以使用以下基本语法在pandas DataFrame中按季度对行进行分组:

#convert date column to datetime
df['date'] = pd.to_datetime(df['date'])

#calculate sum of values, grouped by quarter
df.groupby(df['date'].dt.to_period('Q'))['values'].sum()

这个特殊的公式在日期列中按季度对行进行分组,并计算DataFrame中数值列的和。

下面的例子展示了如何在实践中使用这种语法。

例子:如何在Pandas中按季度分组

假设我们有下面这个pandas数据框架,它显示了某个公司在不同日期的销售额:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'date': pd.date_range(start='1/1/2022', freq='M', periods=12),
                   'sales': [6, 8, 10, 5, 4, 8, 8, 3, 5, 14, 8, 3]})

#view DataFrame
print(df)

         date  sales
0  2022-01-31      6
1  2022-02-28      8
2  2022-03-31     10
3  2022-04-30      5
4  2022-05-31      4
5  2022-06-30      8
6  2022-07-31      8
7  2022-08-31      3
8  2022-09-30      5
9  2022-10-31     14
10 2022-11-30      8
11 2022-12-31      3

相关的: 如何在Pandas中创建一个日期范围

我们可以使用下面的语法来计算按季度分组的销售额之和:

#convert date column to datetime and subtract one week
df['date'] = pd.to_datetime(df['date'])

#calculate sum of sales, grouped by quarter
df.groupby(df['date'].dt.to_period('Q'))['sales'].sum()

date
2022Q1    24
2022Q2    17
2022Q3    16
2022Q4    25
Freq: Q-DEC, Name: sales, dtype: int64

下面是解释输出的方法:

  • 第一季度总共有24 笔销售
  • 第二季度的销售总额为17
  • 第三季度共有16 笔销售
  • 第四季度的总销售额为25

我们可以使用类似的语法来计算其他一些按季度分组的指标。

例如,我们可以计算按季度分组的销售额的最大值:

#convert date column to datetime
df['date'] = pd.to_datetime(df['date'])

#calculate max of sales, grouped by quarter
df.groupby(df['date'].dt.to_period('Q'))['sales'].max()

date
2022Q1    10
2022Q2     8
2022Q3     8
2022Q4    14
Freq: Q-DEC, Name: sales, dtype: int64

输出:

  • 第一季度个别月份的最大销售额为10
  • 第二季度个别月份的最大销售额是8
  • 第三季度个别月份的最大销售额是8
  • 第四季度个别月份的最大销售额为14

注意:你可以在这里找到pandas中groupby操作的完整文档。

其他资源

下面的教程解释了如何在pandas中执行其他常见的操作:

如何在Pandas数据框架中按月分组
如何在Pandas数据框架中按周分组
Pandas:如何使用Groupby和带条件计数