Pandas dataframe 的按时间月份分组

Pandas dataframe 的按时间月份分组

在本文中,我们将介绍如何使用Pandas dataframe 中的 groupby 函数来按照时间月份对数据进行分组。

阅读更多:Pandas 教程

数据准备

首先,我们需要准备一些数据来进行演示。我们创建一个包含日期和数值两列的数据框:

import pandas as pd
import numpy as np

dates = pd.date_range(start='20210101', end='20211231')
values = np.random.randint(0, 100, size=365)

df = pd.DataFrame({'date':dates, 'value':values})

这样就生成了一个包含2021年每一天的数据框。

按月份分组

接下来,我们可以使用 groupby 函数按月份对数据进行分组。首先,我们需要将日期列的粒度缩小到月份。我们可以使用 pd.Grouper 函数来轻松完成这项工作。

df['month'] = df.groupby(pd.Grouper(key='date', freq='M'))['value'].transform('mean')

这里,我们将日期 date 列的粒度缩小至月份,并将每个月的平均值赋值给 month 列。其中:

  • key='date' 指明将日期列作为分组的关键字。
  • freq='M' 指明指定的粒度为月份。
  • transform('mean') 指明使用平均值函数对每个月的数据进行转换。

现在,我们已经成功地按月份分组并计算了每个月的平均值。下面来看一下生成的数据框。

print(df.head())

输出如下所示:

        date  value      month
0 2021-01-01     85  54.677419
1 2021-01-02     10  54.677419
2 2021-01-03      0  54.677419
3 2021-01-04      5  54.677419
4 2021-01-05     89  54.677419

可以看到,在 month 列中,每个月的平均值已经被计算了出来。

筛选数据

接下来,我们可以根据月份的平均值筛选出特定的数据。例如,我们可以筛选出月份平均值大于70的数据。

df_high_value = df[df['month']>70]

这里,我们可以使用 Pandas 内置的条件筛选功能。df['month']>70 相当于创建了一个 TrueFalse 的Series,该Series将被传递给原始数据框以筛选出符合条件的行。

现在,我们已经筛选出了 month 大于70的行。下面来看一下筛选出来的数据框。

print(df_high_value.head())

输出如下所示:

         date  value      month
0  2021-01-01     85  54.677419
4  2021-01-05     89  54.677419
5  2021-01-06     90  54.677419
6  2021-01-07     27  54.677419
10 2021-01-11     75  54.677419

这里,我们可以看到只有月份平均值大于70的行被筛选出来了。

总结

到此为止,我们已经介绍了如何使用 Pandas dataframe 中的 groupby 函数来按照时间月份对数据进行分组的方法。希望这篇文章能够对你运用 Pandas 处理时间序列数据时有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程