2017-02-16 3 views
1

Учитывая это DataFrame:Панды: создать словарь с кортежем в качестве ключа

import pandas as pd 
first=[0,1,2,3,4] 
second=[10.2,5.7,7.4,17.1,86.11] 
third=['a','b','c','d','e'] 
fourth=['z','zz','zzz','zzzz','zzzzz'] 
df=pd.DataFrame({'first':first,'second':second,'third':third,'fourth':fourth}) 
df=df[['first','second','third','fourth']] 

    first second third fourth 
0  0 10.20  a  z 
1  1 5.70  b  zz 
2  2 7.40  c zzz 
3  3 17.10  d zzzz 
4  4 86.11  e zzzzz 

Я могу создать словарь со списком столбцов в качестве значений, например:

d = {df.loc[idx, 'first']: [df.loc[idx, 'second'], df.loc[idx, 'third']] for idx in range(df.shape[0])} 

но как может Я создаю словарь с, скажем, кортежем, содержащий first и second в качестве ключа?

Результат будет выглядеть так:

In[1]:d 
Out[1]: 
{(0,10.199999999999999): 'a', 
(1,5.7000000000000002): 'b', 
(2,7.4000000000000004): 'c', 
(3,17.100000000000001): 'd', 
(4,86.109999999999999): 'e'} 

PS: и как я мог убедиться, что pandas не запутались с ценностями? 10,20 теперь стал +10,1999999999 ...

ответ

3

Вам нужно создать MultiIndex по set_index и затем вызвать Series.to_dict:

a = df.set_index(['first','second']).third.to_dict() 
print (a) 
{(2, 7.4): 'c', (1, 5.7): 'b', (3, 17.1): 'd', (0, 10.2): 'a', (4, 86.11): 'e'} 
Смежные вопросы