我在python panda DataFrame中有以下数据。我想将分组框图与https://stanford.edu/~mwaskom/software/seaborn/examples/grouped_boxplot.html
中的类似对于每个id,我想并排绘制两个箱形图。我如何实现这一目标。我尝试用seaborn包绘制它但没有任何成功。
id predicted real
1 [10, 10, 10] [16, 18, 20]
2 [12, 12, 15] [15, 17, 19, 21, 23]
3 [20, 5, 4, 4] [29, 32]
4 [25, 25, 25, 24, 21] [21, 24, 25, 26, 28, 29, 30, 33]
5 [20, 20, 20, 21] [21, 22, 24, 26, 28, 30, 31, 32]
6 [8, 3, 3, 14] [25, 27]
7 [1, 4, 4, 4, 5, 6, 10] [69, 71, 72]
8 [11, 11, 11, 11] [19, 21, 22, 23, 24]
9 [7, 6, 9, 9] [19, 26, 27, 28]
10 [30, 30, 30, 30, 30] [38, 39]
答案 0 :(得分:4)
请注意您正在查看的示例中的表结构
import seaborn as sns
tips = sns.load_dataset("tips")
sns.boxplot(x="day", y="total_bill", hue="sex", data=tips, palette="PRGn")
sns.despine(offset=10, trim=True)
tips.head()
我们的目标是像这样设置你的表
from StringIO import StringIO
import pandas as pd
text = """id predicted real
1 [10, 10, 10] [16, 18, 20]
2 [12, 12, 15] [15, 17, 19, 21, 23]
3 [20, 5, 4, 4] [29, 32]
4 [25, 25, 25, 24, 21] [21, 24, 25, 26, 28, 29, 30, 33]
5 [20, 20, 20, 21] [21, 22, 24, 26, 28, 30, 31, 32]
6 [8, 3, 3, 14] [25, 27]
7 [1, 4, 4, 4, 5, 6, 10] [69, 71, 72]
8 [11, 11, 11, 11] [19, 21, 22, 23, 24]
9 [7, 6, 9, 9] [19, 26, 27, 28]
10 [30, 30, 30, 30, 30] [38, 39]"""
df = pd.read_csv(StringIO(text), sep='\s{2,}', engine='python', index_col=0)
df = df.stack().str.strip('[]') \
.str.split(', ').unstack()
df
df1 = df.stack().apply(pd.Series).stack().astype(int) \
.rename_axis(['id', 'reality', None]) \
.rename('value').reset_index(['id', 'reality']) \
.reset_index(drop=True)
df1.head()
sns.boxplot(x='id', y='value', hue='reality', data=df1, palette='PRGn')
sns.despine(offset=10, trim=True)