我知道这个问题已在stackoverflow中的多个线程中被问到,但我无法实现我希望如何转换数据。我是python的初学者,主要使用sql。
我在数据框中保存的值的格式如下所述
order_id primary_dish primary_cat dish_id
912574 54465 2423 54481
912574 54465 2423 54540
912574 54481 2425 54465
912574 54481 2425 54540
912574 54540 2429 54481
912574 54540 2429 54465
我希望这些数据表示为
order_id primary_dish primary_cat 54481 5450 54465
912574 54465 2423 1 1 0
912574 54481 2425 0 1 1
912574 54540 2429 1 0 1
基本上,保存的数据框df中的最后一列dish_id
是
转置并且该主要菜肴的值由1表示
如果不存在则由0
答案 0 :(得分:4)
试试这个:
In [5]: df.pivot_table(index=['order_id','primary_dish','primary_cat'],
columns='dish_id', aggfunc='size', fill_value=0) \
.reset_index()
Out[5]:
dish_id order_id primary_dish primary_cat 54465 54481 54540
0 912574 54465 2423 0 1 1
1 912574 54481 2425 1 0 1
2 912574 54540 2429 1 1 0
答案 1 :(得分:1)
更简单的方法。使用pd.crosstab
pd.crosstab(df['dish_id'],[df['order_id'],df['primary_dish'],df['primary_cat']]).T.reset_index()