我在多索引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')
,但无济于事。
编辑:添加了我迄今为止尝试过的内容。
答案 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');