Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas pivot table with column as dictionary

I have a dataframe which looks like this. Only order is unique.

vendor  order order_class    time
33       33     42        22/12/2018
33       39     189       25/12/2018
35       197    91        19/01/2019
35       22     189       18/12/2018
35       11     189       30/11/2018

How do I pivot my dataframe to look like this, where the keys are order_class and values are [(order1, time1), (order2, time2)]

vendor   dict
33       {42 : [(33, 25/12/2018)], 189 : [(39, 25/12/2018)]}
35       {91 : [(197, 19/01/2019)], 189: [(22, 18/12/2018), (11, 30/11/2018)]}

*EDITED

An order class can have multiple (order, time) values which needs to be stored in a list.

like image 629
MrSoLoDoLo Avatar asked Feb 01 '26 05:02

MrSoLoDoLo


1 Answers

An alternative approach using groupby, agg and zip:

d1 = df.groupby(['vendor', 'order_class']).agg(list).reset_index(level=1)
d2 = d1.apply(lambda s: {s['order_class']: list(zip(s['order'], s['time']))}, axis=1)
d2 = d2.groupby(level=0).agg(lambda s: {k:v for d in s for k, v in d.items()}).rename('_dict').reset_index()

 #print(d2)
vendor   dict
33       {42 : [(33, 22/12/2018)], 189 : [(39, 25/12/2018)]}
35       {91 : [(197, 19/01/2019)], 189: [(22, 18/12/2018), (11, 30/11/2018)]}
like image 189
Shubham Sharma Avatar answered Feb 02 '26 22:02

Shubham Sharma