📜  按周时间分组 (1)

📅  最后修改于: 2023-12-03 15:39:48.451000             🧑  作者: Mango

按周时间分组

在软件开发中,经常需要按照时间进行数据分组和统计,其中按周时间分组是一种常见的方式。本文将介绍如何在Python中使用pandas库进行按周时间分组。

准备工作

首先需要安装pandas库,可以使用pip命令进行安装:

pip install pandas
示例数据

为了方便演示,这里定义了一个示例数据集,包含日期和销售额两列。

import pandas as pd

data = {
    'date': ['2021-09-01', '2021-09-02', '2021-09-03', '2021-09-04', '2021-09-05', '2021-09-06', '2021-09-07', '2021-09-08', '2021-09-09', '2021-09-10', '2021-09-11', '2021-09-12', '2021-09-13', '2021-09-14', '2021-09-15', '2021-09-16', '2021-09-17', '2021-09-18', '2021-09-19', '2021-09-20', '2021-09-21', '2021-09-22', '2021-09-23', '2021-09-24', '2021-09-25', '2021-09-26', '2021-09-27', '2021-09-28', '2021-09-29', '2021-09-30'],
    'sales': [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000]
}

df = pd.DataFrame(data)
按周时间分组

要按周时间分组,首先需要将日期转换成 datetime 类型,并将其设置为索引:

df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)

然后使用 resample() 方法进行按周分组,以每周的星期一为起点:

weekly_sales = df.resample('W-MON').sum()
结果展示

最后,我们来看一下按周时间分组的结果,以 markdown 表格的形式展示:

| date                |   sales |
|:--------------------|--------:|
| 2021-09-06 00:00:00 |    2100 |
| 2021-09-13 00:00:00 |    6300 |
| 2021-09-20 00:00:00 |   10500 |
| 2021-09-27 00:00:00 |   14800 |
| 2021-10-04 00:00:00 |    3000 |
完整代码

最后,将上述所有代码整合起来,得到完整的按周时间分组的代码:

import pandas as pd

data = {
    'date': ['2021-09-01', '2021-09-02', '2021-09-03', '2021-09-04', '2021-09-05', '2021-09-06', '2021-09-07', '2021-09-08', '2021-09-09', '2021-09-10', '2021-09-11', '2021-09-12', '2021-09-13', '2021-09-14', '2021-09-15', '2021-09-16', '2021-09-17', '2021-09-18', '2021-09-19', '2021-09-20', '2021-09-21', '2021-09-22', '2021-09-23', '2021-09-24', '2021-09-25', '2021-09-26', '2021-09-27', '2021-09-28', '2021-09-29', '2021-09-30'],
    'sales': [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000]
}

df = pd.DataFrame(data)

# 将日期转换为 datetime 类型,并将其设置为索引
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)

# 按周时间分组
weekly_sales = df.resample('W-MON').sum()

# 展示结果
print(weekly_sales.to_markdown())