2016-06-30 10 views
4

ich eine DataFrame haben wie folgt:Datenrahmen Pandas mit Werten als Tupel dict

In [23]: df = pandas.DataFrame({'Initial': ['C','A','M'], 'Sex': ['M', 'F', 'F'], 'Age': [49, 39, 19]}) 
     df = df[['Initial', 'Sex', 'Age']] 
     df 

Out[23]: 
    Initial Sex Age 
0  C M 49 
1  A F 39 
2  M F 19 

Mein Ziel ist es, ein dict wie diese zu erstellen:

{'C': ('49', 'M'), 'A': ('39', 'F'), 'M': ('19', 'F')} 

Derzeit mache ich es wie dies:

In [24]: members = df.set_index('FirstName', drop=True).to_dict('index') 
     members 

Out[24]: {'C': {'Age': '49', 'Sex': 'M'}, 'A': {'Age': '39', 'Sex': 'F'}, 'M': {'Age': '19', 'Sex': 'F'}} 

Dann benutze ich eine dict comprehrension die Werte des Schlüssels als Tupel zu formatieren statt dicts:

In [24]: members= {x: tuple(y.values()) for x, y in members.items()} 
     members 

Out[24]: {'C': ('49', 'M'), 'A': ('39', 'F'), 'M': ('19', 'F')} 

Meine Frage ist: Gibt es eine Möglichkeit, eine dict im Format ich von einem Pandas DataFrame wollen zu bekommen, ohne den zusätzlichen anfallenden des dict Verständnis belauscht?

+0

Wollen Sie das Alter Strings sein? – unutbu

+0

@unutbu Ist nicht wirklich wichtig. – lostsoul29

Antwort

9

Diese Arbeit sollte:

df.set_index('Initial')[['Age', 'Sex']].T.apply(tuple).to_dict() 

{'A': (39, 'F'), 'C': (49, 'M'), 'M': (19, 'F')} 
+5

Anstelle der Transponierung ('T') können Sie' axis = 1' an 'apply()' übergeben. – chrisaycock

+0

Funktioniert gut, danke! – lostsoul29

+0

@chrisaycock stimmte thx zu. Stilistisch wählte ich 'T' aus Gründen der Kürze. – piRSquared

4

Wenn Listen anstelle von Tupeln in Ordnung sind, verwenden Sie könnten dann:

In [45]: df.set_index('Initial')[['Age','Sex']].T.to_dict('list') 
Out[45]: {'A': [39, 'F'], 'C': [49, 'M'], 'M': [19, 'F']} 
+0

Ich brauche Tupel, aber danke für die Antwort! Ich habe es aufgewertet. – lostsoul29

Verwandte Themen