簡體   English   中英

Python Pandas:將日期時間列分組為小時和分鍾聚合

[英]Python Pandas: Group datetime column into hour and minute aggregations

這似乎是相當直截了當的,但幾乎一整天后我還沒有找到解決方案。 我已經用 read_csv 加載了我的 dataframe 並輕松解析、組合並將日期和時間列索引到一列中,但現在我希望能夠根據小時和分鍾分組進行整形和執行計算,類似於您可以在excel pivot。

我知道如何重新采樣到小時或分鍾,但它維護與每個小時/分鍾相關的日期部分,而我只想將數據集聚合到小時和分鍾,類似於 excel 樞軸中的分組並選擇“小時”和“分鍾”但是不選擇其他任何東西。

任何幫助將不勝感激。

你不能這樣做,其中df是你的數據幀:

times = pd.to_datetime(df.timestamp_col)
df.groupby([times.hour, times.minute]).value_col.sum()

Wes 的代碼對我不起作用。 但是 DatetimeIndex 函數( docs )做了:

times = pd.DatetimeIndex(data.datetime_col)
grouped = df.groupby([times.hour, times.minute])

DatetimeIndex 對象是 Pandas 中時間的表示。 第一行創建一個日期時間數組。 第二行使用此數組獲取所有行的小時和分鍾數據,允許按這些值對數據進行分組 ( docs )。

當我搜索這種類型的 groupby 時遇到了這個。 Wes 上面的代碼對我不起作用,不確定是不是因為pandas隨着時間的推移發生了變化。

pandas 0.16.2 ,我最后做的是:

grp = data.groupby(by=[data.datetime_col.map(lambda x : (x.hour, x.minute))])
grp.count()

你有 (hour, minute) 元組作為分組索引。 如果你想要多索引:

grp = data.groupby(by=[data.datetime_col.map(lambda x : x.hour),
                       data.datetime_col.map(lambda x : x.minute)])

我有上面的 Wes & Nix 答案的替代方案,只需一行代碼,假設您的列已經是日期時間列,您不需要分別獲取小時和分鍾屬性:

df.groupby(df.timestamp_col.dt.time).value_col.sum()

這可能有點晚了,但我為任何有同樣問題的人找到了一個很好的解決方案。 我有一個這樣的df:

datetime              value
2022-06-28 13:28:08   15
2022-06-28 13:28:09   30
...                   ...
2022-06-28 14:29:11   20
2022-06-28 14:29:12   10

我想將那些以秒為間隔的時間戳轉換為以分鍾為間隔的時間戳,並在過程中添加值列。 有一種簡潔的方法:

df['datetime'] = pd.to_datetime(df['datetime']) #if not already as datetime object
grouped = df.groupby(pd.Grouper(key='datetime', axis=0, freq='T')).sum()
print(grouped.head())

結果:

datetime              value
2022-06-28 13:28:00   45
...                   ...
2022-06-28 14:29:00   30

freq='T' 代表分鍾。 您也可以按小時或天對它進行分組。 它們被稱為偏移別名

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM