I have a nested dictionary like below
dictA = {X:{A: 0.2, B:0.3, C:0.4} ,Y:{A: 0.05, B:0.8, C:0.1},Z:{A: 0.15, B:0.6, C:0.25}}
I want to create a dataframe where the first key corresponds to the index and the keys of the nested dictionaries are the column headers. For example,
A B C
X 0.2 0.3 0.4
Y 0.05 0.8 0.1
Z 0.15 0.6 0.25
I know I can pull out the keys, from the outer dict, into a list (using a list comprehension):
index_list = [key for key in dictA.iterkeys()]
and then the nested dictionaries into a single dictionary:
dict_list = [value for value in dictA.itervalues()]
final_dict = {k: v for dict in dict_list for k, v in dict.items()}
Finally I could create my df
by:
df = pd.DataFrame(final_dict, index = index_list)
The problem is i need to map the correct values back to the correct index which is difficult when the ordinary of dictionary changes.
I imagine there is a completely different and more efficient way than what I have suggested above, help please?
You can simply convert your dictA
to a DataFrame and then take transpose, to make columns into index and index into columns. Example -
df = pd.DataFrame(dictA).T
Demo -
In [182]: dictA = {'X':{'A': 0.2, 'B':0.3, 'C':0.4} ,'Y':{'A': 0.05, 'B':0.8, 'C':0.1},'Z':{'A': 0.15, 'B':0.6, 'C':0.25}}
In [183]: df = pd.DataFrame(dictA).T
In [184]: df
Out[184]:
A B C
X 0.20 0.3 0.40
Y 0.05 0.8 0.10
Z 0.15 0.6 0.25
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments