如何在 Python Pandas 中按时间间隔对数据进行分组?


数据分析日益成为每个行业的至关重要组成部分。许多组织严重依赖信息,制定战略决策,预测趋势并了解其消费者行为。在这样的环境下,Python 的 Pandas 库已作为一款强大的设备脱颖而出,它提供了一系列不同的功能来有效地控制、分解和想象信息。这些强大的功能之一包括按时间间隔对数据进行分组。

本文将重点介绍如何使用 Pandas 按时间间隔对数据进行分组。我们将探索语法、一种易于理解的算法、两种不同的方法以及基于这两种方法的两个可完整执行的真实代码。

语法

我们将重点关注的方法是 Pandas 的 groupby() 函数,尤其是它的 resampling 方法。语法如下:

df.groupby(pd.Grouper(key='date', freq='T')).sum()

在语法中:

  • df − 你的 DataFrame。

  • groupby(pd.Grouper()) − 用于对数据进行分组的函数。

  • key − 要分组的列。此处为“日期”列。

  • 频率 - 时间间隔的频率。(分钟用“T”,小时用“H”,天用“D”等)

  • sum() − 聚合函数。

算法

以下是按时间间隔对数据进行分组的分步算法 −

  • 导入必要的库,即 Pandas。

  • 加载或创建 DataFrame。

  • 如果日期列不是 datetime 对象,则将其转换为 datetime 对象。

  • 使用 pd.Grouper 在日期列上应用 groupby() 函数,并使用所需频率。

  • 应用 sum()、mean() 等聚合函数。

  • 打印或存储结果。

方法

我们将考虑两种不同的方法 −

方法 1:按日频率分组

在这个示例中,我们使用一系列日期和值创建了一个 DataFrame。然后,我们按日频率对数据进行分组,并计算出每一天的值的总和。

示例

# Import pandas
import pandas as pd

# Create a dataframe
df = pd.DataFrame({
   'date': pd.date_range(start='1/1/2022', periods=100, freq='H'),
   'value': range(100)
})

# Convert 'date' to datetime object, if not already
df['date'] = pd.to_datetime(df['date'])

# Group by daily frequency
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 库是此代码真正完成的首要任务,而 Pandas 库对于任何数据处理工作而言都是绝对必需的。在用于构建 DataFrame 时,利用 pd.DataFrame() 策略是随后的阶段。“date”和“value”节组成了这个 DataFrame。pd.date_range() 函数用于在“date”列中创建一个每小时时间戳的进度,“value”节仅包含一个整个数字范围。“date”列是此交互的结果。

尽管我们的“date”列现在解决了 datetime 对象,但我们还是会使用 pd.to_datetime() 函数确保它得到转换。此步骤至关重要,因为收集活动的进展取决于此节是否具有 datetime 对象的信息类型。

之后,为了按日常(“D”)频率对我们的数据进行分组,我们将 groupby() 函数与 pd.Grouper() 函数结合使用。在应用分组后,我们将 sum() 函数放在一起,该函数将属于同一天的所有“value”元素组合到一个总和中。

最后,写出分组的 DataFrame,显示每一天值的总数。

方法 2:按自定义频率进行分组,例如 15 分钟的间隔

示例

# Import pandas
import pandas as pd

# Create a dataframe
df = pd.DataFrame({
   'date': pd.date_range(start='1/1/2022', periods=100, freq='T'),
   'value': range(100)
})

# Convert 'date' to datetime object, if not already
df['date'] = pd.to_datetime(df['date'])

# Group by 15-minute frequency
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 相同;主要区别在于“date”列现在包含按分钟的时间戳。

为了让收集活动正确工作,“date”列应为 datetime 对象,而 pd.to_datetime() 函数可确保发生这种情况。

在此节中,我们使用位于 groupby() 方法内的 pd.Grouper() 函数,以 15 分钟的专门频率(“15T”)执行分组操作。为了汇总每个 15 分钟时间间隔的“value”条目,我们使用 sum() 函数,该方法与第一种方法中使用的方法相同。

通过显示新分组的 DataFrame 来完成代码,该 DataFrame 显示每个 15 分钟时间间隔中“value”列的总数。

结论

Pandas 的功能适用于多种数据操作,其中之一是按时间间隔对数据进行分组。通过将 groupby() 函数与 pd.Grouper 结合使用,我们可以根据每日频率或自定义频率有效地对数据进行细分,从而实现高效且灵活的数据分析。

按时间间隔对数据进行分组的能力可以让分析师和企业从数据中提取有意义的见解。无论是计算每天的销售总额、获取每小时的平均温度还是每 15 分钟统计网站点击次数,按时间间隔对数据进行分组都可以帮助我们更好地理解数据中随时间变化的趋势、模式和异常值。

请记住,Python 的 Pandas 库是用于数据分析的强大工具。学习如何使用其函数(如 groupby 方法)可以帮助你成为更有效且精通的数据分析师或数据科学家。

更新于: 2023 年 7 月 27 日

5 千次以上查看

开启你的 职业 生涯

通过完成课程获得认证

开始
广告