绘制pandas聚合对象

问题描述 投票:1回答:3

我已经获得了以下形式的聚合:

                                                        measure
                                                            mean
attribute dataset_name                          method            
50      d111                                  m1        0.559120
                                              m2        0.632573
                                              m3        0.555867
                                              m4        0.587053
                                              m5        0.647413
        d222                                  m1        0.759120
                                              m2        0.632573
                                              m3        0.655867
                                              m4        0.584053
                                              m5        0.647413
        d333                                  m1        0.859120
                                              m2        0.632573
                                              m3        0.655867
                                              m4        0.587053
                                              m5        0.647413

我的目标是以下列方式绘制此数据:

x axis = attribute

y axis = mean

hue = method

facet_wrap = dataset_name

我似乎无法使用pandas + seaborn库。我主要是将这个表格转换为融合版本,在数据集名称,方法和属性上进行了转移。

谢谢!

python pandas seaborn
3个回答
1
投票

我认为需要选择列measure以避免MultiIndex然后reset_index

print (df.reset_index().columns)
MultiIndex(levels=[['measure', 'method', 'dataset_name', 'attribute'], ['mean', '']],
           labels=[[3, 2, 1, 0], [1, 1, 1, 0]])

df1 = df['measure'].reset_index()
print (df1)
    attribute dataset_name method      mean
0          50         d111     m1  0.559120
1          50         d111     m2  0.632573
2          50         d111     m3  0.555867
3          50         d111     m4  0.587053
4          50         d111     m5  0.647413
5          50         d222     m1  0.759120
6          50         d222     m2  0.632573
7          50         d222     m3  0.655867
8          50         d222     m4  0.584053
9          50         d222     m5  0.647413
10         50         d333     m1  0.859120
11         50         d333     m2  0.632573
12         50         d333     m3  0.655867
13         50         d333     m4  0.587053
14         50         d333     m5  0.647413

print (df1.columns)
Index(['attribute', 'dataset_name', 'method', 'mean'], dtype='object')

和情节使用Manish Saraswat' answer


2
投票

添加到@jezrael的答案,这是为了绘图:

g = sns.FacetGrid(df, col='dataset_name', hue='method',size = 7, aspect = 1.0)
(g.map(plt.scatter, 'attribute','mean').set_titles("{col_name} Dataset").add_legend())

# output plot

enter image description here


0
投票

我设法通过简单地做到解决这个问题:

df_new = df.reset_index()

如果有更优雅的方式,我会很高兴知道。

© www.soinside.com 2019 - 2024. All rights reserved.