python - Pandas 数据透视多索引表,无聚合

标签 python pandas dataframe pivot multi-index

我有一个带有多索引的 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

我应该注意到,由于额外的计算,“准确性”列实际上最终成为一个字符串。有任何想法吗?我觉得我已经尝试了奇怪的枢轴/堆栈/取消堆栈/重新索引的每种组合,但我能得到的最接近的是一个非常短的表,当我想实际维护最终列号时,所有内容都奇怪地聚合在一起(没有聚合)。

最佳答案

我认为你需要unstack + 重命名:

print (df.unstack().rename(columns=lambda x: x + ' - '+ df.index.names[-1], level=0))
                      Accuracy - Group          
Group                                1         2
Classifier Preprocess                           
CNN        None               0.879696  0.644665
           PCA                0.613153  0.502952
SVM        None               0.589627  0.323793
           PCA                0.619407  0.356250

替代方案:

df1 = df.unstack().rename(columns=lambda x: '{} - {}'.format(x, df.index.names[-1]), level=0)
print (df1)
                      Accuracy - Group          
Group                                1         2
Classifier Preprocess                           
CNN        None               0.376257  0.531367
           PCA                0.058679  0.064388
SVM        None               0.630307  0.908984
           PCA                0.312942  0.895200

详细信息:

print (df.index.names)
['Classifier', 'Preprocess', 'Group']

print (df.index.names[-1])
Group

print (df.unstack())
                       Accuracy          
Group                         1         2
Classifier Preprocess                    
CNN        None        0.376257  0.531367
           PCA         0.058679  0.064388
SVM        None        0.630307  0.908984
           PCA         0.312942  0.895200

关于python - Pandas 数据透视多索引表,无聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48201291/

相关文章:

python - 如何将openCV中的imshow()和moveWindow()与python结合起来?

python - 从部分分类列获取 value_counts

python - pyspark 将数据帧写入 hdfs 失败

python - 从时间戳在指定范围或持续时间内的 Pandas DataFrame 中删除重复行

python - 将信息传递给导入的 Python 模块

python - 在 Python 中将带有嵌入式 CSS 的 SVG 转换为 PDF

python - 尝试将 Dictionary 转换为 DataFrame Pandas 时出现 ValueError

Python Pandas 分配/计算 bool 列的位置

r - 如何将一个复杂的字符串拆分成它的组件以便形成组

python - 在 Django 中对与特定类相关的帖子进行注释和计数