Python将单行转置为列

时间:2017-07-12 15:35:24

标签: python python-3.x pandas

我知道这个问题已在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

表示

2 个答案:

答案 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()