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
提问by piRSquared
consider the pd.Series
s
考虑 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
回答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 Series
is 1M
:
如果长度Series
是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