【发布时间】:2022-10-23 17:32:31
【问题描述】:
我有一个如下所示的 pandas 数据框,其中包含B 列中的日期时间值。
import pandas as pd
data = {'A': ['XYZ', 'XYZ', 'XYZ', 'XYZ', 'PQR', 'PQR', 'PQR', 'PQR', 'CVB', 'CVB', 'CVB', 'CVB'],
'B': ['2022-02-16 14:00:31', '2022-02-16 16:11:26', '2022-02-16 17:31:26', '2022-02-16 22:47:46', '2022-02-17 07:11:11', '2022-02-17 10:43:36', '2022-02-17 15:05:11', '2022-02-18 18:06:12', '2022-02-19 09:05:46', '2022-02-19 13:02:16', '2022-02-19 18:05:26', '2022-02-19 22:05:26']}
df = pd.DataFrame(data)
df['B'] = pd.to_datetime(df['B'])
df
| A | B |
+-------+----------------------+
| XYZ | 2022-02-16 14:00:31 |
| XYZ | 2022-02-16 16:11:26 |
| XYZ | 2022-02-16 17:31:26 |
| XYZ | 2022-02-16 22:47:46 |
| PQR | 2022-02-17 07:11:11 |
| PQR | 2022-02-17 10:43:36 |
| PQR | 2022-02-17 15:05:11 |
| PQR | 2022-02-18 18:06:12 |
| CVB | 2022-02-19 09:05:46 |
| CVB | 2022-02-19 13:02:16 |
| CVB | 2022-02-19 18:05:26 |
| CVB | 2022-02-19 22:05:26 |
+-------+----------------------+
我想对 24 小时间隔期间的日期时间值进行分组,这样我的输出应该如下所示。
Expected Output :
| A | B | Group |
+-------+----------------------+-----------
| XYZ | 2022-02-16 14:00:31 | 1 |
| XYZ | 2022-02-16 16:11:26 | 1 |
| XYZ | 2022-02-16 17:31:26 | 1 |
| XYZ | 2022-02-16 22:47:46 | 1 |
| PQR | 2022-02-17 07:11:11 | 1 |
| PQR | 2022-02-17 10:43:36 | 1 |
| PQR | 2022-02-17 15:05:11 | 2 |
| PQR | 2022-02-18 18:06:12 | 3 |
| CVB | 2022-02-19 09:05:46 | 3 |
| CVB | 2022-02-19 13:02:16 | 3 |
| CVB | 2022-02-19 18:05:26 | 3 |
| CVB | 2022-02-19 22:05:26 | 4 |
+-------+----------------------+----------+
目前,我尝试使用下面的代码将B 列中的日期时间值分组为 24 小时间隔时间段,这导致了我没想到的不成功输出。我的 24 小时周期将首先从初始日期时间开始,即 2022-02-16 14:00:31,然后下一个 24 小时周期将从 2022-02-17 15:05:11 开始,依此类推。
df1 = df.reset_index().set_index(df['B']).rename_axis(None)
df1.loc[df1.first('24h').index, "GROUP"] = 1
df1
Actual Output :
| A | B | Group |
+-------+----------------------+------------+
| XYZ | 2022-02-16 14:00:31 | 1 |
| XYZ | 2022-02-16 16:11:26 | 1 |
| XYZ | 2022-02-16 17:31:26 | 1 |
| XYZ | 2022-02-16 22:47:46 | 1 |
| PQR | 2022-02-17 07:11:11 | 1 |
| PQR | 2022-02-17 10:43:36 | 1 |
| PQR | 2022-02-17 15:05:11 | NaN |
| PQR | 2022-02-18 18:06:12 | NaN |
| CVB | 2022-02-19 09:05:46 | NaN |
| CVB | 2022-02-19 13:02:16 | NaN |
| CVB | 2022-02-19 18:05:26 | NaN |
| CVB | 2022-02-19 22:05:26 | NaN |
+-------+----------------------+------------+
有没有一种方法可以将 24 小时时间间隔内的日期时间值分组,以便获得如图所示的预期输出?我想要一个高效的解决方案,以便代码可以有效地在 100 万个时间戳上运行。
【问题讨论】:
-
你如何定义你的 24 小时周期。第一个是否从
2022-02-16 14:00:31开始?它们是连续的还是它们之间是否存在间隙,即第二个周期是从第一个周期的开始 + 24 小时开始,还是从2022-02-17 15:05:11开始? -
@Riley:我的 24 小时周期首先从
2022-02-16 14:00:31开始。第二个周期从第一个周期开始 + 24 小时 (2022-02-16 14:00:31),在我的情况下是2022-02-17 15:05:11。
标签: python-3.x pandas dataframe python-datetime