Reputation: 25997
I have a dataframe like this
import pandas as pd
df = pd.DataFrame({'keyid': ['d1', 'd1', 'd2', 'd2'],
'keys': ['key1', 'key2', 'key1', 'key2'],
'vals': ['val1', 'val2', 'val3', 'val4']})
keyid keys vals
0 d1 key1 val1
1 d1 key2 val2
2 d2 key1 val3
3 d2 key2 val4
which I want to convert into
{'d1': {'key1': 'val1', 'key2': 'val2'},
'd2': {'key1': 'val3', 'key2': 'val4'}}
The closest I got is:
print(df.groupby('keyid')['keys', 'vals'].apply(lambda g: g.to_dict(orient='records')).to_dict())
which prints
'd1': [{'keys': 'key1', 'vals': 'val1'}, {'keys': 'key2', 'vals': 'val2'}],
'd2': [{'keys': 'key1', 'vals': 'val3'}, {'keys': 'key2', 'vals': 'val4'}]}
I could now modify this dictionary further, but is there a more straightforward way of doing this?
Upvotes: 1
Views: 60
Reputation: 862511
You are close, only need dictionary in apply
with dict
and values
:
print(df.groupby('keyid')['keys', 'vals'].apply(lambda x: dict(x.values)).to_dict())
{'d1': {'key1': 'val1', 'key2': 'val2'},
'd2': {'key1': 'val3', 'key2': 'val4'}}
Upvotes: 3