我有一个熊猫数据框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
新列是通过将列名Qty
和PR
与列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()]
我无法找到进一步做任何事情的干净方法。
答案 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