【发布时间】:2020-03-28 00:36:10
【问题描述】:
我有一列 Pandas Datetime64 类型的元素
df['time']
0 2019-10-04 12:03:53+00:00
1 2019-10-04 11:21:23+00:00
2 2019-10-04 12:23:11+00:00
3 2019-10-04 18:04:52+00:00
4 2019-10-04 12:22:21+00:00
...
2889974 2019-10-11 10:53:19+00:00
2889975 2019-10-11 10:58:38+00:00
2889976 2019-10-10 10:36:47+00:00
2889977 2019-10-10 10:36:47+00:00
2889978 2019-07-08 04:36:45+00:00
Name: time, Length: 2889979, dtype: datetime64[ns, UTC]
AND 一列对应的时间戳称为df['time_full'],就像这样;
df['time_full']
0 12:03:53
1 11:21:23
2 12:23:11
3 18:04:52
4 12:22:21
...
2889974 10:53:19
2889975 10:58:38
2889976 10:36:47
2889977 10:36:47
2889978 04:36:45
Name: time_full, Length: 2889979, dtype: object
我想创建全天 30 分钟的时段(基本上是 48 个时段),并为 df['time'] 列中的所有值分配一个时段。基本上,创建一堆分类变量的时间戳。像这样的东西(只是一个例子):
df['time'] df['slot']
0 2019-10-04 12:03:53+00:00 4
1 2019-10-04 11:21:23+00:00 2
2 2019-10-04 12:23:11+00:00 32
3 2019-10-04 18:04:52+00:00 40
4 2019-10-04 12:22:21+00:00 5
我尝试使用 Pandas 的 pd.cut() 方法(如 here)对插槽进行分箱,结果是这样:
pd.cut(df['time'].astype(np.int64)//10**9,
bins=pd.date_range("00:00", "23:59", freq="30min"))
但得到的输出看起来像:
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
...
2889974 NaN
2889975 NaN
2889976 NaN
2889977 NaN
2889978 NaN
Name: time, Length: 2889979, dtype: category
Categories (47, interval[int64]): [(1575331200000000000, 1575333000000000000] < (1575333000000000000, 1575334800000000000] < (1575334800000000000, 1575336600000000000] < (1575336600000000000, 1575338400000000000] ... (1575408600000000000, 1575410400000000000] < (1575410400000000000, 1575412200000000000] < (1575412200000000000, 1575414000000000000] < (1575414000000000000, 1575415800000000000]]
我也尝试将df['time_full'] 用作垃圾箱,但由于它是字符串列表,因此引发了错误。我认为问题在于 df['time'] 在同时具有日期 和 时间时不适合分箱,但我不太确定。任何帮助,将不胜感激。
【问题讨论】:
-
是否要将数据重新采样到 30 分钟的频率?
-
@luigigi 为了清晰起见,我进行了编辑,并举了一个例子。这有帮助吗?
-
是的,现在我明白了。但是您示例中的插槽是输出真实插槽还是只是随机值?
-
@luigigi 随机值,我只是把它们放在那里说明我想要一个分类变量