我有一个DataFrame,并希望为具有特定标签(列表框图)的数据选择制作分组箱图。箱线图应显示值并添加一条线,显示每组箱线图中值的平均值。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,30,size=(100, 4)), columns=list('ABCD'))
label = ['A','B','C','D','E','F']
df['label'] = np.random.choice(label, df.shape[0])
boxplots = ['A', 'D']
我无法弄清楚如何制作分组箱图?我是否遍历箱线图列表,然后在每次迭代中将它们添加到绘图中?
非常感谢任何想法!
答案 0 :(得分:1)
使用isin
和groupby
df_selection = df[df['label'].isin(boxplots)]
df_sum = df_selection.groupby('label').sum()
df_mean = df_sum.mean(axis=1)
line_data = [(i-.3, i+.3, value) for i, (label, value) in enumerate(df_mean.iteritems()) ]
x_min, x_max, y = zip(*line_data)
ax = df_sum.plot.bar()
ax = ax.hlines(y, x_min, x_max, linewidth=2, color='k')