如何在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。

  • <li><p>将日期列转换为datetime对象,如果尚未转换。</p></li>
  • 使用pd.Grouper在日期列上应用groupby()函数,使用所需的频率。

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

  • 打印或存储结果。

方法

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

方法一:按日频率分组

在这个例子中,我们创建了一个包含一系列日期和值的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 期间的后续阶段。 “日期”和“值”部分组成了此数据帧。 pd.date_range() 函数用于在“日期”列中创建一系列每小时时间戳,而“值”部分仅包含整数范围。 “日期”列是此交互的结果。

尽管我们的“日期”列目前处理日期时间对象的方式不同,但我们逐渐使用 pd.to_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()函数确保会发生这种情况。

在本节中,我们使用位于 groupby() 方法内部的 pd.Grouper() 函数,利用 15 分钟(“15T”)的专门频率来执行分组操作。为了聚合每个 15 分钟时间间隔的“值”条目,我们使用 sum() 函数,这与第一种方法中使用的方法相同。

通过显示新分组的DataFrame完成了代码,该DataFrame显示了每个15分钟时间间隔内'value'列的总和。

结论

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

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

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

以上就是如何在Python Pandas中按时间间隔分组数据?的详细内容

猜你喜欢

转载自blog.csdn.net/lmrylll/article/details/132564304