Pandas 在创建新列时转换数据帧
我有一个熊猫数据帧Pandas 在创建新列时转换数据帧,pandas,python-3.5,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: Mast
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
新列是通过将列名称quaty
和PR
与列HE
中的整数值连接起来创建的(列HE
始终具有整数值)
df2
基本上有行具有唯一组合的MastLoc、Loc和Type
,列Qty和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\u 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
使用带有多个索引调整的透视表
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
是否可以将其重新组织为:PR1、Qty1、PR2、Qty2等?@Zanam正在添加排序索引。像s=s.sort_index(level=1,axis=1)一样,是否可以将其重新组织为:PR1、Qty1、PR2、Qty2等?@Zanam正在添加sort_index。类s=s.sort_索引(级别=1,轴=1)