我有一个pandas系列,其中数据是datetime类型。我想将其转换为唯一的整数索引。我正在寻找一个直接,快速的命令,因为数据很大。
示例:
0
0 2015-07-05
1 2015-07-12
3 2015-07-19
4 2015-07-12
应转换为:
0
0 1
1 2
3 3
4 2
事实上,我也想知道是否有一个通用命令,它以这种方式将一系列任何数据类型转换为一系列唯一整数。
答案 0 :(得分:3)
使用factorize
:
s = pd.Series(['2015-07-05', '2015-07-12', '2015-07-19', '2015-07-12'], name=0)
print (s)
0 2015-07-05
1 2015-07-12
2 2015-07-19
3 2015-07-12
Name: 0, dtype: object
s1 = pd.Series(pd.factorize(s)[0] + 1, s.index)
print (s1)
0 1
1 2
3 3
4 2
dtype: int64
另一种可能的解决方案是rank
:
s1 = s.rank(method='dense').astype(int)
print (s1)
0 1
1 2
2 3
3 2
Name: 0, dtype: int32
时间不同:
s = pd.concat([s]*100000).reset_index(drop=True)
In [78]: %timeit (pd.Series(pd.factorize(s)[0] + 1, s.index))
100 loops, best of 3: 13.9 ms per loop
In [79]: %timeit (s.rank(method='dense').astype(int))
1 loop, best of 3: 536 ms per loop