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

问题描述 投票:0回答:1

我有以下格式的表格:

  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行用于2个user_id,其余的信息将显示在列而不是行中。

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

谢谢。

python pandas pivot pivot-table
1个回答
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    
© www.soinside.com 2019 - 2024. All rights reserved.