2013-07-02 78 views

回答

45
In [9]: Series(df.Letter.values,index=df.Position).to_dict() 
Out[9]: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'} 

速度水平的研究(使用沃特的方法)

In [6]: df = DataFrame(randint(0,10,10000).reshape(5000,2),columns=list('AB')) 

In [7]: %timeit dict(zip(df.A,df.B)) 
1000 loops, best of 3: 1.27 ms per loop 

In [8]: %timeit Series(df.A.values,index=df.B).to_dict() 
1000 loops, best of 3: 987 us per loop 
+0

我是否正確理解這一點,即您的df與我的數據相同(前兩個命令是隻輸入數據,因爲我擁有它)?否則,爲什麼要手動輸入數據值作爲字符串? – user1083734

+0

是的,他們是相同的,我只是複製並粘貼你的數據(該步驟僅用於重現性) – Jeff

+4

沒有創建一個系列第一...字典(zip(df.Position,df.Letter)) –

14

我找到解決問題的一個更快的方法,至少在現實大型數據集使用: df.set_index(KEY).to_dict()[VALUE]

上50,000行證明:

df = pd.DataFrame(np.random.randint(32, 120, 100000).reshape(50000,2),columns=list('AB')) 
df['A'] = df['A'].apply(chr) 

%timeit dict(zip(df.A,df.B)) 
%timeit pd.Series(df.A.values,index=df.B).to_dict() 
%timeit df.set_index('A').to_dict()['B'] 

輸出:

100 loops, best of 3: 7.04 ms per loop # WouterOvermeire 
100 loops, best of 3: 9.83 ms per loop # Jeff 
100 loops, best of 3: 4.28 ms per loop # Kikohs (me) 
+2

總是向下滾動可能更快的答案! –

相關問題