Having the following dataframe,
df = pd.DataFrame({\'device_id\' : [\'0\',\'0\',\'1\',\'1\',\'2\',\'2\'],
\'p_food\' : [0.2,0.1,0.3,0.5,0.1,0.7
If you are still looking for an answer using groupby
df = df.groupby('device_id')['p_food', 'p_phone'].apply(lambda x: pd.DataFrame(x.values)).unstack().reset_index()
df.columns = df.columns.droplevel()
df.columns = ['device_id','p_food_1', 'p_food_2', 'p_phone_1','p_phone_2']
You get
device_id p_food_1 p_food_2 p_phone_1 p_phone_2
0 0 0.2 0.1 0.8 0.9
1 1 0.3 0.5 0.7 0.5
2 2 0.1 0.7 0.9 0.3