我有一个Pandas Dataframe:
Seq Part Type Grand Total
------------------------------------------
Q001 1 A total 100
1 A ok 80
1 A not 20
2 C total 150
2 C ok 100
2 C not 50
我希望将其转换为:
Seq Part total ok not
--------------------------------------------
Q001 1 A 100 80 20
2 C 150 100 50
含义我希望Type列的值作为列标题,并将它们的相关值设置为各自列中的Grand total,保持DF的其余部分保持不变。
我想使用transpose / pivot这样的工具,而不是将整个东西一点一点地复制到另一个DF并按照我的意愿创建它。
感谢您的时间。
答案 0 :(得分:2)
我想我会这样做(使用unstack
):
print df
Q Seq Part Type Grand_Total
0 Q001 1 A total 100
1 Q001 1 A ok 80
2 Q001 1 A not 20
3 Q001 2 C total 150
4 Q001 2 C ok 100
5 Q001 2 C not 50
为方便起见,我调用了您的第一列Q
(如果它是您设置中的索引,请重置索引):
df = df.set_index(['Q','Seq','Part','Type']).unstack(['Type'])
print df
Grand_Total
Type total ok not
Q Seq Part
Q001 1 A 100 80 20
2 C 150 100 50
我认为这可以满足您的需求,但如果您不喜欢分层列索引,请执行以下操作:
df.columns = df.columns.get_level_values(1)
print df.reset_index()
Type Q Seq Part total ok not
0 Q001 1 A 100 80 20
1 Q001 2 C 150 100 50