I have a requirement to convert a df that is in following format:
d = {
'A': ['a1', 'a1', 'a1', 'a1', 'a1', 'a1', 'a1', 'a2', 'a2', 'a2', 'a2', 'a2', 'a2', 'a2', 'a2'],
'B': ['b1', 'b1', 'b1', 'b1', 'b2', 'b2', 'b2', 'b3', 'b3', 'b3', 'b3', 'b3', 'b3', 'b4', 'b4', ],
'C': ['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'c10', 'c11', 'c12', 'c13', 'c14', 'c15', ],
}
df = pd.DataFrame(d)
df
A B C
0 a1 b1 c1
1 a1 b1 c2
2 a1 b1 c3
3 a1 b1 c4
4 a1 b2 c5
5 a1 b2 c6
6 a1 b2 c7
7 a2 b3 c8
8 a2 b3 c9
9 a2 b3 c10
10 a2 b3 c11
11 a2 b3 c12
12 a2 b3 c13
13 a2 b4 c14
14 a2 b4 c15
to a dictionary in following format:
outDict = {
'a1': {
'b1': ['c1', 'c2', 'c3', 'c4'],
'b2': ['c5', 'c6', 'c7'],
},
'a2': {
'b3': ['c8', 'c9', 'c10', 'c11', 'c12', 'c13'],
'b4': ['c14', 'c15'],
}
}
i.e. values in column A becomes first level key; values in column B second level keys and values in column C a list.
Any pointers?
Here is another way using pivot_table
:
out = {k:v.dropna().to_dict() for k,v in
df.pivot_table('C','B','A',aggfunc=list).items()}
{'a1': {'b1': ['c1', 'c2', 'c3', 'c4'], 'b2': ['c5', 'c6', 'c7']},
'a2': {'b3': ['c8', 'c9', 'c10', 'c11', 'c12', 'c13'], 'b4': ['c14', 'c15']}}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With