Pandas 如何按时间间隔对数据进行分组

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。

  • 将日期列转换为日期时间对象,如果它还不是日期时间对象。

  • 将groupby()函数与pd.Grouper应用于具有所需频率的日期列。

  • 应用聚合函数,如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库,这是任何数据操作工作的绝对要求。使用pd.DataFrame()方法是构建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与之前的模型使用的一样,唯一的区别是“date”列现在包含每分钟的时间戳。

为了正确地进行收集活动,’date’列应该是一个datetime对象,而pd.to_datetime()函数确保这一点。

在这个部分中,我们通过使用特定频率为15分钟(’15T’)的pd.Grouper()函数进行分组操作,该函数位于groupby()方法中。为了对每个15分钟时间间隔的’value’条目进行汇总,我们使用sum()函数,这与第一种方法中使用的方法相同。

代码通过显示新分组的DataFrame来完成,其中显示了每个15分钟时间间隔中’value’列的总和。

结论

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

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

请记住,Python的Pandas库是一种强大的数据分析工具。学习如何使用其函数,如groupby方法,可以帮助您成为一个更高效、娴熟的数据分析师或数据科学家。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程