我有一个很长的datetime数组,它已经排序。
是否有可能得到另一个由0,1,2,3组成的数组....,根据datetime值?
下面是一个例子:
import pandas as pd
import numpy as np
t = np.array(pd.to_datetime(['2021-02-01 00:00', '2021-02-01 00:00',
'2021-02-01 00:10',
'2021-02-01 00:20', '2021-02-01 00:20']))
我想得到下面基于t的数组:
array([0, 0, 1, 2, 2])
前两个元素相同,所以赋值为0
。然后,下一个是唯一的,1
被分配。后两个相同,2
是指定的。下一个值应该是3
,4
,5
....
使用categorical
:
In [1410]: y = pd.Series(t).astype('category').cat.codes.to_numpy()
In [1411]: y
Out[1411]: array([0, 0, 1, 2, 2], dtype=int8)
或者:
使用np.unique
和return_inverse=True
直接将numpy array
转换为integer codes
:
In [1421]: y = np.unique(t, return_inverse=True)[1]
In [1422]: y
Out[1422]: array([0, 0, 1, 2, 2])