如何按日期和时间对 Pandas DataFrame 进行分组?

pythonserver side programmingprogramming更新于 2024/1/11 17:24:00

在数据分析和操作中,处理包含日期和时间信息的数据很常见。一项有用的操作是根据日期和时间对数据进行分组以执行聚合或提取特定信息。在本文中,我们将研究如何使用 Python 中 Pandas 库的强大功能按日期和时间对 Pandas DataFrame 进行分组。

语法

在深入了解细节之前,让我们先了解一下我们将在以下代码示例中使用的方法的标点符号 -

dataframe.groupby(pd.Grouper(key='column_name', freq='frequency')).operation()

这里,dataframe 指的是 Pandas DataFrame 对象,column_name 表示包含日期和时间信息的部分的名称,repeat 表示我们想要打包数据的周期(例如,'D' 表示每天,'M' 表示每月,'H' 表示每小时),action() 表示对组合执行的最佳操作数据。

算法

现在,我们应该逐步了解按日期和时间收集 Pandas DataFrame 的过程 -

  • 导入必要的库 -

    import pandas as pd - 导入 Pandas 库进行数据操作和分析。

  • 将数据加载到 Pandas DataFrame 中 -

    dataframe = pd.read_csv('data.csv') - 从 CSV 文件读取数据并将其存储在名为 dataframe 的 DataFrame 中。

  • 将日期和时间列转换为 datetime 数据类型 -

    dataframe['datetime_column'] = pd.to_datetime(dataframe['datetime_column']) - 将指定的列 datetime_column 转换为datetime 数据类型。此步骤可确保 Pandas 将该列识别为包含日期和时间。

  • 按日期和时间对 DataFrame 进行分组 −

    grouped_data = dataframe.groupby(pd.Grouper(key='datetime_column', freq='frequency')) − 使用 groupby() 方法和 pd.Grouper 根据 datetime_column 和指定频率对 DataFrame 进行分组。

  • 对分组数据执行操作 −

    result = grouped_data.operation() − 对分组数据应用所需操作,其中 operation() 可以是任何 Pandas 操作或方法。

Data.csv

datetime_column,value
2023-07-01 08:00:00,10
2023-07-01 12:00:00,5
2023-07-02 09:00:00,7
2023-07-02 14:00:00,3
2023-07-03 10:00:00,8
2023-07-03 16:00:00,2
2023-07-04 11:00:00,6
2023-07-04 18:00:00,4

方法 1:按每日频率分组

在此方法中,我们将按每日频率对 DataFrame 进行分组,从而使我们能够按每日执行聚合或计算。

示例

import pandas as pd

# 将 CSV 文件中的数据加载到 Pandas DataFrame 中
dataframe = pd.read_csv('data.csv')

# 将"datetime_column"转换为 datetime 数据类型
dataframe['datetime_column'] = pd.to_datetime(dataframe['datetime_column'])

# 使用每日频率按日期和时间对 DataFrame 进行分组
grouped_data = dataframe.groupby(pd.Grouper(key='datetime_column', freq='D'))

# 对分组数据执行操作(对"value"列求和)
result = grouped_data['value'].sum()

# 打印结果
print(result)

输出

datetime_column
2023-01-05     5
2023-01-06     0
2023-01-07     0
2023-01-08     0
2023-01-09     2
              ..
2023-12-27     0
2023-12-28     3
2023-12-29     0
2023-12-30     0
2023-12-31    16
Freq: D, Name: value, Length: 361, dtype: int64

解释

按每日频率分组

在此方法中,我们需要按每日频率对 DataFrame 中的数据进行分组,并计算每个日期的"值"列的总和。

代码首先导入必要的库。我们使用别名"pd"导入 pandas 库,以便有效地使用 DataFrames。

然后,我们使用 pd.read_csv() 函数将 CSV 文件中的数据加载到 Pandas DataFrame 中。我们希望数据存储在名为"data.csv"的文件中。如果需要,请更改文件类型。

要使用 DataFrame 中的日期和时间数据,我们需要将比较部分永久更改为日期时间数据类型。我们使用 pd.to_datetime() 函数并传递部分名称"datetime_column",以便对其进行适当转换。

转换列后,我们可以使用每日频率按日期对 DataFrame 进行分组。我们在 DataFrame 上使用 groupby() 方法,并使用 pd.Grouper(key='datetime_column', freq='D') 将键指定为"datetime_column",将频率指定为"D"(代表每日)。

收集数据后,我们可以对收集的数据执行一个过程。在这种情况下,我们需要计算每个日期的"值"部分的数量。我们将"值"确定为感兴趣的部分,并将aggregate()方法应用于收集的数据。

最后,我们可以打印结果以查看每个日期的"值"部分的数量。

请注意,您需要更改代码中的记录路径或名称以匹配您的特定CSV文档。运行此代码版本应该会为您提供理想的结果,显示DataFrame中每个日期的"值"部分的数量。此方法提供了一种按每日频率对DataFrame进行分组并每天执行计算或聚合的方法,使您可以分析并从数据中提取有意义的见解。

方法2:按每小时频率分组

在此方法中,我们将按每小时频率对DataFrame进行分组,使我们能够按小时分解或管理数据。这是一个展示如何实现这一点的模型 -

示例

import pandas as pd

# 将 CSV 文件中的数据加载到 Pandas DataFrame 中
dataframe = pd.read_csv('data.csv')

# 将日期和时间列转换为日期时间数据类型
dataframe['datetime_column'] = pd.to_datetime(dataframe['datetime_column'])

# 使用每小时频率按日期和时间对 DataFrame 进行分组
grouped_data = dataframe.groupby(pd.Grouper(key='datetime_column', freq='H'))

# 对分组数据执行操作
result = grouped_data['value'].mean()

# 打印结果
print(result)

输出

datetime_column
2023-01-05 17:00:00    5.0
2023-01-05 18:00:00    NaN
2023-01-05 19:00:00    NaN
2023-01-05 20:00:00    NaN
2023-01-05 21:00:00    NaN
                      ... 
2023-12-31 01:00:00    NaN
2023-12-31 02:00:00    NaN
2023-12-31 03:00:00    NaN
2023-12-31 04:00:00    NaN
2023-12-31 05:00:00    8.0
Freq: H, Name: value, Length: 8629, dtype: float64

解释

按每小时频率分组

在此方法中,我们需要按每小时频率对 DataFrame 中的数据进行分组,并计算每小时"值"列的平均值。

代码首先导入必要的库。我们使用别名"pd"导入 pandas 库以有效使用 DataFrames。

然后,我们使用 pd.read_csv() 函数将 CSV 文件中的数据加载到 Pandas DataFrame 中。我们希望数据存储在名为"data.csv"的文件中。如果需要,请更改文件类型。

要使用 DataFrame 中的日期和时间数据,我们需要将相关部分永久转换为日期时间数据类型。我们使用 pd.to_datetime() 函数并传递节名称"datetime_column",以正确转换它。

转换列后,我们准备使用每小时频率连续打包 DataFrame。我们在 DataFrame 上使用 groupby() 方法,并使用 pd.Grouper(key='datetime_column', freq='H') 将键指定为"datetime_column",将频率指定为"H"(每小时)。

收集数据后,我们可以对收集的数据执行一个过程。对于这种情况,我们需要计算每小时"值"部分的平均值。

我们指定"值"作为感兴趣的列,并将 mean() 方法应用于分组数据。

最后,我们可以打印结果以查看每小时"值"部分的平均值。

请注意,您需要更改代码中的记录方式或名称以匹配您的特定 CSV 文档。运行此代码示例应该会为您提供正确的结果,显示 DataFrame 中每小时"值"部分的平均值。

此方法提供了一种按小时频率收集 DataFrame 并按小时执行计算或收集的方法,使您可以从数据中分析和提取重要数据。

结论

通过使用 Python 中 Pandas 库的强大功能,我们可以轻松地按日期和时间收集 Pandas DataFrame。此功能使我们能够根据不同的频率(例如每日、每小时、每月)执行不同的收集、计算或分析,而这只是冰山一角。Pandas 提供的灵活性使其成为以简洁高效的方式处理和管理时间序列数据的宝贵工具。通过遵循所示的步骤并使用给定的语言结构,您现在可以轻松地按日期和时间打包您的 Pandas DataFrame,以从您的数据中分离出重要的知识。


相关文章