pandas行作为列名 - 重塑数据帧

时间:2018-03-05 15:56:08

标签: python pandas pivot pivot-table

我的表格格式如下:

  user_id   total_spent purchase_date   purchase_id aisle   department  item_cost
    33      279.3       1/29/18         26          gn      1           25.7
    33      279.3       1/29/18         26          aj      2           17
    33      279.3       1/29/18         26          bs      2           31.7
    33      279.3       1/29/18         26          jt      3           30
    33      279.3       1/29/18         26          tj      3           8.1
    33      279.3       1/29/18         26          ga      4           60.6
    33      279.3       1/29/18         26          tw      4           35.9
    33      279.3       1/29/18         26          aw      5           34.1
    33      279.3       1/29/18         26          te      5           36.2
    26      331.7       11/15/17        85          je      1           93.5
    26      331.7       11/15/17        85          tg      2           21.1
    26      331.7       11/15/17        85          ds      2           23.2
    26      331.7       11/15/17        85          jw      3           48.8
    26      331.7       11/15/17        85          df      3           10.2
    26      331.7       11/15/17        85          lj      4           56.2
    26      331.7       11/15/17        85          oa      4           7
    26      331.7       11/15/17        85          aw      5           32.4
    26      331.7       11/15/17        85          cm      5           39.3

并希望将其转换为每个部门值作为列名,例如 department_1,department_2 等。与过道和商品费用相同: dept_aisle_gn,dept_aisle_df 等后跟相应的成本作为列。

换句话说,最后,我想为2个user_id设置 2行,其余信息将显示在列而不是行中。

最初我从redshift中提取数据,我会用python pandas操纵它。不幸的是,枢轴或交叉表不适用于红移。我试过熊猫枢纽,但似乎不适合我。

谢谢。

1 个答案:

答案 0 :(得分:1)

pd.pivot_table支持此功能。

pd.pivot_table(df,
               index=['user_id', 'total_spent', 'purchase_date', 'purchase_id'],
               columns=['aisle', 'department'],
               values='item_cost',
               aggfunc=np.sum,
               fill_value=0)

# aisle                                          aj    aw    bs    cm    df  \
# department                                      2     5     2     5     3   
# user_id total_spent purchase_date purchase_id                               
# 26      331.7       11/15/17      85            0  32.4   0.0  39.3  10.2   
# 33      279.3       1/29/18       26           17  34.1  31.7   0.0   0.0   

# aisle                                            ds    ga    gn    je  jt  \
# department                                        2     4     1     1   3   
# user_id total_spent purchase_date purchase_id                               
# 26      331.7       11/15/17      85           23.2   0.0   0.0  93.5   0   
# 33      279.3       1/29/18       26            0.0  60.6  25.7   0.0  30   

# aisle                                            jw    lj oa    te    tg   tj  \
# department                                        3     4  4     5     2    3   
# user_id total_spent purchase_date purchase_id                                   
# 26      331.7       11/15/17      85           48.8  56.2  7   0.0  21.1  0.0   
# 33      279.3       1/29/18       26            0.0   0.0  0  36.2   0.0  8.1   

# aisle                                            tw  
# department                                        4  
# user_id total_spent purchase_date purchase_id        
# 26      331.7       11/15/17      85            0.0  
# 33      279.3       1/29/18       26           35.9