我有一個帶有日期時間列的資料框。我正在嘗試根據 24 小時視窗進行分組,但我不確定我錯過了什么。請讓我知道我哪里出錯了。
例如我的資料框如下
Dates
0 2021-07-26 07:30:00
1 2021-07-26 13:05:00
2 2021-07-28 08:00:00
3 2021-07-29 00:36:00
4 2021-07-29 16:15:00
我正在嘗試對資料框進行分組,并在基于每個組中的第一個日期的 24 小時視窗內給它們一個唯一的編號。
這意味著它應該分組并分配一個唯一的編號,如下所示。它選擇第一個值并將其后的所有行值分組,其中時間落在 24 小時視窗內。因此,在此示例中,它應該將介于 (2021-07-26 07:30:00 到 2021-07-27 07:30:00) 之間的所有內容分組為 1 和 (2021-07-28 08:00:00 到 2021) -07-29 08:00:00) 作為 2 和 (2021-07-29 16:15:00 到 2021-07-30 16:15:00) 作為 3
預期 O/P
date groupedbytime
0 2021-07-26 07:30:00 1
1 2021-07-26 13:05:00 1
2 2021-07-28 08:00:00 2
3 2021-07-29 00:36:00 2
4 2021-07-29 16:15:00 3
我正在使用 groupby 和 grouper 但我得到的 o/p 如下所示,它按天分組,而不是按 24 小時視窗分組。請告知如何處理這個問題
tempdf['groupedbytime'] = tempdf.groupby(pd.Grouper(key="Dates",freq='24H')).ngroup() 1
輸出/輸出
date groupedbytime
0 2021-07-26 07:30:00 1
1 2021-07-26 13:05:00 1
2 2021-07-28 08:00:00 2
3 2021-07-29 00:36:00 3
4 2021-07-29 16:15:00 3
uj5u.com熱心網友回復:
您可以使用通過使用整數除法減去第一個值創建的時間增量,以添加連續順序factorize:
s = df['Dates'].sub(df['Dates'].iat[0]).dt.total_seconds() // (3600 * 24)
df['groupedbytime'] = pd.factorize(s)[0] 1
print (df)
Dates groupedbytime
0 2021-07-26 07:30:00 1
1 2021-07-26 13:05:00 1
2 2021-07-28 08:00:00 2
3 2021-07-29 00:36:00 2
4 2021-07-29 16:15:00 3
與Grouper:
s = df['Dates'].sub(df['Dates'].iat[0])
s = s.to_frame().groupby(pd.Grouper(key="Dates",freq='24H'))['Dates'].ngroup()
df['groupedbytime'] = pd.factorize(s)[0] 1
print (df)
0 2021-07-26 07:30:00 1
1 2021-07-26 13:05:00 1
2 2021-07-28 08:00:00 2
3 2021-07-29 00:36:00 2
4 2021-07-29 16:15:00 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456663.html
上一篇:比較四個不同列中的每行值
