创建新列时转换熊猫数据框

时间:2018-10-04 16:52:32

标签: pandas python-3.5

我有一个熊猫数据框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()]

我无法找到进一步做任何事情的干净方法。

1 个答案:

答案 0 :(得分:5)

使用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