Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

quickest way to swap index with values

Tags:

python

pandas

consider the pd.Series s

s = pd.Series(list('abcdefghij'), list('ABCDEFGHIJ')) s  A    a B    b C    c D    d E    e F    f G    g H    h I    i J    j dtype: object 

What is the quickest way to swap index and values and get the following

a    A b    B c    C d    D e    E f    F g    G h    H i    I j    J dtype: object 
like image 649
piRSquared Avatar asked Oct 20 '16 05:10

piRSquared


1 Answers

One posible solution is swap keys and values by:

s1 = pd.Series(dict((v,k) for k,v in s.iteritems())) print (s1) a    A b    B c    C d    D e    E f    F g    G h    H i    I j    J dtype: object 

Another the fastest:

print (pd.Series(s.index.values, index=s )) a    A b    B c    C d    D e    E f    F g    G h    H i    I j    J dtype: object 

Timings:

In [63]: %timeit pd.Series(dict((v,k) for k,v in s.iteritems())) The slowest run took 6.55 times longer than the fastest. This could mean that an intermediate result is being cached. 10000 loops, best of 3: 146 µs per loop  In [71]: %timeit (pd.Series(s.index.values, index=s )) The slowest run took 7.42 times longer than the fastest. This could mean that an intermediate result is being cached. 10000 loops, best of 3: 102 µs per loop 

If length of Series is 1M:

s = pd.Series(list('abcdefghij'), list('ABCDEFGHIJ')) s = pd.concat([s]*1000000).reset_index(drop=True) print (s)  In [72]: %timeit (pd.Series(s.index, index=s )) 10000 loops, best of 3: 106 µs per loop  In [229]: %timeit pd.Series(dict((v,k) for k,v in s.iteritems())) 1 loop, best of 3: 1.77 s per loop  In [230]: %timeit (pd.Series(s.index, index=s )) 10 loops, best of 3: 130 ms per loop  In [231]: %timeit (pd.Series(s.index.values, index=s )) 10 loops, best of 3: 26.5 ms per loop 
like image 143
jezrael Avatar answered Sep 17 '22 20:09

jezrael