将datetime Series转换为整数索引

时间:2017-02-01 08:11:50

标签: python python-3.x pandas indexing series

我有一个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

事实上,我也想知道是否有一个通用命令,它以这种方式将一系列任何数据类型转换为一系列唯一整数。

1 个答案:

答案 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