来自Pandas

时间:2018-04-08 20:04:25

标签: python pandas

我在多索引DataFrame中有数据结构如下:

                    0      1
method metric
HASH   L2_TCM     287    296
       TOT_CYC   6211   6100
RECV   L2_TCM     331    323
       TOT_CYC  10881   7524
SYNTH  L2_TCM     869    856
       TOT_CYC  29117  29560

列0和1表示每个方法 - 度量对的样本。我出于说明目的展示了2个样本,但可能超过2个。

理想情况下,我想使用pandas创建一组数字,每个方法一个包含使用样本的每个指标的箱线图。这听起来应该是直截了当的,但我正在努力让分组正常工作。

有关如何绘制此图或重新配置DataFrame以简化绘图的任何建议都将非常感激。

提前感谢您的帮助!

我已尝试使用df.boxplot(by='method')作为起点,但失败了KeyError。基于this问题,我注意到.boxplot似乎期望数据列而不是行。我同样试图使用df.T.boxplot(by='method'),但无济于事。

编辑:添加了我迄今为止尝试过的内容。

1 个答案:

答案 0 :(得分:1)

这是你正在寻找的吗?

import pandas as pd
import seaborn as sns

'''
method metric       0      1
HASH   L2_TCM     287    296
HASH   TOT_CYC   6211   6100
RECV   L2_TCM     331    323
RECV   TOT_CYC  10881   7524
SYNTH  L2_TCM     869    856
SYNTH  TOT_CYC  29117  29560
'''

df = pd.read_clipboard()

# this is what your data looks like...
df.groupby([
    'method',
    'metric'
]).agg({
    '0' : 'max',
    '1' : 'max'
})

# I reshaped it to have no multiindex...


# And then melt the data to work with seaborn
df1 = df.melt(id_vars = [
    'method',
    'metric'
])

sns.boxplot(data = df1, x = 'method', y = 'value', hue = 'metric');

final