lostsoul29 lostsoul29 - 1 month ago 9
Python Question

pandas DataFrame to dict with values as tuples

I have a

DataFrame
as follows:

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


My goal is to create a dict like this:

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


Currently, I'm doing it like this:

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


Then I use a
dict
comprehrension to format the values of the keys as tuples instead of 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')}


My question is: is there a way to get a
dict
in the format I want from a pandas
DataFrame
without incurring the additional overheard of the
dict
comprehension?

Answer

This should work:

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

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