如何在 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 千次以上檢視

開啟你的 職業 生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.