在创建新列时转换 pandas 数据框

Transforming pandas dataframe while creating new columns

我有一个 pandas 数据框 df,其值如下:

HE  PR  MastLoc Loc     Type    Qty
1   2   E1      LocA    TC      3
2   23  E1      LocA    TB      18
3   17  E1      LocA    TC      11
3   2   E1      LocB    TC      3
24  3   E1      LocB    TB      4

我想从上面的数据帧创建以下数据帧df

MastLoc Loc     Type    Qty1    PR1   Qty2  PR2   Qty3  PR3  Qty24  PR24
E1      LocA    TC      3       2                 11    17      
E1      LocA    TB                    18    23              
E1      LocB    TC                                3     2       
E1      LocB    TB                                            4      3

新列是通过将列名称 QtyPR 与列 HE 中的整数值连接起来创建的(列 HE 始终具有整数值)。

df2 基本上包含具有 MastLoc, Loc and Type 的唯一组合的行,并且列 Qty and HE 中的所有值已移动到使用列 HE 中的整数创建的新列中。

到目前为止,我已经完成了:

df['colQty'] = ['Qty' + str(x) for x in df['HE'].tolist()]
df['colPR'] = ['PR' + str(x) for x in df['HE'].tolist()]

我想不出一个干净的方法来进一步做任何事情。

使用 pivot_table 和多个索引调整

s=pd.pivot_table(df,index=['MastLoc','Loc','Type'],columns=['HE'],values=['PR','Qty'],aggfunc='sum')
s.columns=s.columns.map('{0[0]}{0[1]}'.format) 
s
Out[895]: 
                   PR1   PR2   PR3  PR24  Qty1  Qty2  Qty3  Qty24
MastLoc Loc  Type                                                
E1      LocA TB    NaN  23.0   NaN   NaN   NaN  18.0   NaN    NaN
             TC    2.0   NaN  17.0   NaN   3.0   NaN  11.0    NaN
        LocB TB    NaN   NaN   NaN   3.0   NaN   NaN   NaN    4.0
             TC    NaN   NaN   2.0   NaN   NaN   NaN   3.0    NaN