在创建新列时转换 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
新列是通过将列名称 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()]
我想不出一个干净的方法来进一步做任何事情。
使用 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
我有一个 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
新列是通过将列名称 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()]
我想不出一个干净的方法来进一步做任何事情。
使用 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