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


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

语法

在深入细节之前,让我们从我们将在下文中使用的技术的语法开始:

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

这里,dataframe 指的是 Pandas DataFrame 对象,column_name 表示包含日期和时间信息的列的名称,freq 表示我们希望按其分组数据的频率(例如,'D' 表示每日,'M' 表示每月,'H' 表示每小时),而 operation() 表示要对分组数据执行的操作。

算法

现在,让我们逐步了解按日期和时间分组 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

方法一:按每日频率分组

在这种方法中,我们将按每日频率对 DataFrame 进行分组,从而允许我们对每日数据执行聚合或计算。

示例

import pandas as pd

# Load the data from the CSV file into a Pandas DataFrame
dataframe = pd.read_csv('data.csv')

# Convert the 'datetime_column' to a datetime data type
dataframe['datetime_column'] = pd.to_datetime(dataframe['datetime_column'])

# Group the DataFrame by date and time using daily frequency
grouped_data = dataframe.groupby(pd.Grouper(key='datetime_column', freq='D'))

# Perform an operation on the grouped data (sum the 'value' column)
result = grouped_data['value'].sum()

# Print the result
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 中的数据进行分组,并计算每个日期的“value”列的总和。

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

然后,我们使用 pd.read_csv() 函数将 CSV 文件中的数据加载到 Pandas DataFrame 中。我们假设数据存储在一个名为“data.csv”的文件中。如有必要,请更改文件路径。

为了处理 DataFrame 中的日期和时间数据,我们需要将相应的列转换为 datetime 数据类型。我们使用 pd.to_datetime() 函数并传递列名“datetime_column”来正确转换它。

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

分组数据后,我们可以在分组数据上执行操作。在这种情况下,我们需要计算每个日期“value”列的总和。我们指定“value”为感兴趣的列,并将 sum() 方法应用于分组数据。

最后,我们可以打印结果以查看 DataFrame 中每个日期“value”列的总和。

请注意,您需要更改代码中的文件路径或名称以匹配您的特定 CSV 文件。运行此代码示例应该会为您提供理想的结果,显示 DataFrame 中每个日期“value”列的总和。此方法提供了一种按每日频率对 DataFrame 进行分组并在每日基础上执行计算或聚合的方法,使您可以分析和提取数据中的有意义的见解。

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

在此方法中,我们将按每小时频率对 DataFrame 进行分组,使我们能够按小时分析或操作数据。这是一个演示如何实现此目标的示例:

示例

import pandas as pd

# Load the data from the CSV file into a Pandas DataFrame
dataframe = pd.read_csv('data.csv')

# Convert the date and time column to a datetime data type
dataframe['datetime_column'] = pd.to_datetime(dataframe['datetime_column'])

# Group the DataFrame by date and time using hourly frequency
grouped_data = dataframe.groupby(pd.Grouper(key='datetime_column', freq='H'))

# Perform an operation on the grouped data
result = grouped_data['value'].mean()

# Print the result
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 中的数据进行分组,并计算每个小时“value”列的平均值。

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

然后,我们使用 pd.read_csv() 函数将 CSV 文件中的数据加载到 Pandas DataFrame 中。我们假设数据存储在一个名为“data.csv”的文件中。如有必要,请更改文件路径。

为了处理 DataFrame 中的日期和时间数据,我们需要将相应的列转换为 datetime 数据类型。我们使用 pd.to_datetime() 函数并传递列名“datetime_column”来正确转换它。

转换列后,我们就可以使用每小时频率按小时对 DataFrame 进行分组了。我们对 DataFrame 使用 groupby() 方法,并使用 pd.Grouper(key='datetime_column', freq='H') 指定 key 为'datetime_column',频率为'H'(每小时)。

分组数据后,我们可以在分组数据上执行操作。在这种情况下,我们需要计算每个小时“value”列的平均值。

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

最后,我们可以打印结果以查看 DataFrame 中每个小时“value”列的平均值。

请注意,您需要更改代码中的文件路径或名称以匹配您的特定 CSV 文件。运行此代码示例应该会为您提供理想的结果,显示 DataFrame 中每个小时“value”列的平均值。

此方法提供了一种按每小时频率对 DataFrame 进行分组并在每小时基础上执行计算或聚合的方法,使您可以分析和提取数据中的有意义的见解。

结论

通过使用 Python 中 Pandas 库的强大功能,我们可以轻松地按日期和时间对 Pandas DataFrame 进行分组。此功能使我们能够根据不同的频率(如每日、每小时、每月等)执行各种聚合、计算或分析。Pandas 提供的灵活性使其成为以简洁高效的方式处理和操作时间序列数据的重要工具。通过遵循所示步骤并使用提供的语法,您现在可以成功地按日期和时间对 Pandas DataFrame 进行分组,以从数据中提取有意义的见解。

更新于:2023年7月27日

3K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.