如何在 Python Pandas 中按时间间隔对数据进行分组?
数据分析已日益成为每个行业的关键方面。许多组织严重依赖信息,做出战略决策,预测趋势并了解其消费者行为。在这样的环境下,Python 的 Pandas 库已成为一个强大的工具,提供不同范围的功能来成功控制、分解和想象信息。这些强大的功能之一包括按时间间隔对数据进行分组。
本文将重点介绍如何使用 Pandas 按时间间隔对数据进行分组。我们将探索语法、一种易于理解的算法、两种不同的方法以及基于这些方法的两个完全可执行的实际代码。
语法
我们将重点关注的方法是 Pandas 的 groupby() 函数,特别是其重采样方法。语法如下:
df.groupby(pd.Grouper(key='date', freq='T')).sum()
语法如下:
df − 您的 DataFrame。
groupby(pd.Grouper()) − 用于分组数据的函数。
key − 您要分组的列。这里是"date"列。
freq − 时间间隔的频率。 ('T' 代表分钟,'H' 代表小时,'D' 代表天,等等)
sum() − 聚合函数。
算法
以下是按时间间隔对数据进行分组的分步算法 −
导入必要的库,即 Pandas。
加载或创建 DataFrame。
将日期列转换为 datetime 对象(如果尚未转换)。
使用 pd.Grouper 对具有所需频率的日期列应用 groupby() 函数。
应用聚合函数,如 sum()、mean() 等。
打印或存储结果。
方法
我们将考虑两种不同的方法 -
方法 1:按每日频率分组
在此示例中,我们创建了一个包含一系列日期和值的数据框。然后,我们按每日频率对数据进行分组,并对每天的值求和。
示例
# 导入 pandas import pandas as pd # 创建数据框 df = pd.DataFrame({ 'date': pd.date_range(start='1/1/2022', periods=100, freq='H'), 'value': range(100) }) # 如果尚未将"date"转换为 datetime 对象 df['date'] = pd.to_datetime(df['date']) # 按每日频率分组 daily_df = df.groupby(pd.Grouper(key='date', freq='D')).sum() print(daily_df)
输出
value date 2022-01-01 276 2022-01-02 852 2022-01-03 1428 2022-01-04 2004 2022-01-05 390
解释
引入 Pandas 库是任何数据处理工作的必备条件,而这恰恰是我们在此代码中真正要做的第一件事。使用 pd.DataFrame() 方法就是构建 DataFrame 的下一步。"date"和"value"部分组成了这个 DataFrame。pd.date_range() 函数用于在"date"列中创建一系列每小时时间戳,而"value"部分仅包含整数范围。"date"列是此交互的结果。
尽管我们的"date"列已经指向 datetime 对象,但我们仍然使用 pd.to_datetime() 函数来转换它。此步骤至关重要,因为收集活动的进展取决于此部分是否具有 datetime 对象的信息类型。
之后,为了按日('D')频率对数据进行分组,我们将 groupby() 函数与 pd.Grouper() 函数结合使用。分组应用之后,我们插入 sum() 函数,该函数将属于同一天的所有"值"元素合并为一个总数。
最后,分组的 DataFrame 被写出,显示每天值的总数。
方法 2:按自定义频率分组,例如 15 分钟间隔
示例
# 导入 pandas import pandas as pd # 创建数据框 df = pd.DataFrame({ 'date': pd.date_range(start='1/1/2022', periods=100, freq='T'), 'value': range(100) }) # 如果尚未将"date"转换为 datetime 对象,则将其转换为 datetime 对象 df['date'] = pd.to_datetime(df['date']) # 按 15 分钟频率分组 custom_df = df.groupby(pd.Grouper(key='date', freq='15T')).sum() print(custom_df)
输出
value date 2022-01-01 00:00:00 105 2022-01-01 00:15:00 330 2022-01-01 00:30:00 555 2022-01-01 00:45:00 780 2022-01-01 01:00:00 1005 2022-01-01 01:15:00 1230 2022-01-01 01:30:00 945
解释
第二个方法首先导入与第一个方法相同的 Pandas 库,然后创建 DataFrame。此 DataFrame 与上一个模型中使用的 DataFrame 相同;主要区别在于"日期"列当前包含按分钟计算的时间戳。
"日期"列应为日期时间对象,以便收集活动正常工作,并且 pd.to_datetime() 函数可确保这一点。
在本节中,我们使用位于 groupby() 方法内的 pd.Grouper() 函数,使用 15 分钟("15T")的专用频率执行分组操作。为了聚合每个 15 分钟时间间隔的"值"条目,我们使用 sum() 函数,这与第一种方法中使用的方法相同。
代码通过显示新分组的 DataFrame 完成,该 DataFrame 显示每个 15 分钟时间间隔的"值"列的总数。
结论
Pandas 的功能扩展到各种数据操作,其中之一就是按时间间隔对数据进行分组。通过将 groupby() 函数与 pd.Grouper 结合使用,我们可以有效地根据每日频率或自定义频率对数据进行细分,从而实现高效、灵活的数据分析。
按时间间隔对数据进行分组的能力使分析师和企业能够从他们的数据中提取有意义的见解。无论是计算每天的销售总额、获取每小时的平均气温,还是每 15 分钟计算一次网站点击量,按时间间隔对数据进行分组都使我们能够更好地了解数据随时间变化的趋势、模式和异常值。
请记住,Python 的 Pandas 库是数据分析的强大工具。学习如何使用其函数(如 groupby 方法)可以帮助您成为更有效、更熟练的数据分析师或数据科学家。