2013-07-02 12 views

cevap

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

Hız Karşılaştırılması

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

Bunu doğru anlıyor muyum, dF verilerinim ile aynı (ilk iki komut sadece verilere sahip olduğum gibi). Değilse, neden veri değerlerini elle bir dize olarak giriyorsunuz? – user1083734

+0

evet onlar, sadece bir Serisi ilk ... dicti olduklarını @WouterOvermeire (zip (df.Position, df.Letter)) – Jeff

+4

aynı kopyalayıp yapıştırılan hızındaki yakın şaşırtıcı, seninki –

14

kullanıyorum en azından üzerinde gerçekçi büyük veri setleri, sorunu çözmek için daha hızlı bir yol bulundu: df.set_index(KEY).to_dict()[VALUE]

50.000 satırlarda Kanıtı:

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'] 

Çıkış:

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

Her zaman için aşağı kaydırın olası daha hızlı cevaplar! –

İlgili konular