pandas 用值交换索引的最快方法

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/40146472/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 02:15:04  来源:igfitidea点击:

quickest way to swap index with values

pythonpandas

提问by piRSquared

consider the pd.Seriess

考虑 pd.Seriess

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

回答by jezrael

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 Seriesis 1M:

如果长度Series1M

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