【发布时间】:2018-06-20 10:36:32
【问题描述】:
我有一个带有多索引的 pandas 数据框,其中已经计算了几个 groupby 聚合。我正在尝试将最终分组的列转换为标题,而不进行任何聚合。我已经设法通过聚合来完成它,但似乎无法弄清楚如何简单地转置它,以便最后第二列成为标题,最后一列成为每个标题下的值。
类似的例子:
df = pd.DataFrame.from_dict(
{'Classifier':['SVM']*6 + ['CNN']*6,
'Preprocess': (['None']*3 + ['PCA']*3)*2,
'Group': ([1]*2 + [2]*2)*3,
'Fold': ([1] + [2])*6,
'Accuracy': np.random.rand((12))
})
df = df.groupby(['Classifier', 'Preprocess', 'Group']).agg({'Accuracy': 'mean'})
print df
Accuracy
Classifier Preprocess Group
CNN None 1 0.912794
2 0.514453
PCA 1 0.694035
2 0.740769
SVM None 1 0.235105
2 0.817883
PCA 1 0.567313
2 0.657962
我试图让它看起来像:
Accuracy - Group
Classifier Preprocess 1 2
CNN None 0.912794 0.514453
PCA 0.694035 0.740769
SVM None 0.235105 0.817883
PCA 0.567313 0.657962
我应该注意到,由于额外的计算,'Accuracy' 列实际上最终是一个字符串。有任何想法吗?我觉得我已经尝试了奇怪的枢轴/堆栈/取消堆栈/重新索引的每一种组合,但是我能得到的最接近的是一个非常短的表格,当我想要实际维护最终列号时,所有内容都会奇怪地聚合下来(不聚合)。
【问题讨论】:
-
df.unstack(-1) -
@COLDSPEED 哎呀,我以为我试过了。谢谢!
-
@peur - 所以只需要
df.unstack(-1)吗?不需要rename? -
@jezrael 我对
unstack感到很困惑,但rename也很有帮助 -
@peur - 我问它是因为从你的问题中我知道你也需要
rename。所以这不是骗人的。但是如果只需要unstack,请不要接受并删除您的问题,因为是骗人的。
标签: python pandas dataframe pivot multi-index