:
import numpy
import pandas
from matplotlib import pyplot
import seaborn
seaborn.set(style="ticks")
df = pandas.DataFrame(numpy.random.rand(10,4), columns=list('ABCD'))
df['E'] = [1, 2, 3, 1, 1, 4, 3, 2, 3, 1]
. ,
fig, axes = pyplot.subplots(ncols=4, figsize=(12, 5), sharey=True)
df.query("E in [1, 2]").boxplot(by='E', return_type='axes', ax=axes)

1 , , . .
ax = (
df.set_index('E', append=True)
.stack()
.to_frame()
.reset_index()
.rename(columns={'level_2': 'quantity', 0: 'value'})
.drop('level_0', axis='columns')
.pipe((seaborn.boxplot, 'data'), x='E', y='value', hue='quantity', order=[1, 2])
)
seaborn.despine(trim=True)

, . hue x, :
ax = (
df.set_index('E', append=True)
.stack()
.to_frame()
.reset_index()
.rename(columns={'level_2': 'quantity', 0: 'value'})
.drop('level_0', axis='columns')
.pipe((seaborn.boxplot, 'data'), x='quantity', y='value', hue='E', hue_order=[1, 2])
)
seaborn.despine(trim=True)

, :
E quantity value
0 1 A 0.935433
1 1 B 0.862290
2 1 C 0.197243
3 1 D 0.977969
4 2 A 0.675037
5 2 B 0.494440
6 2 C 0.492762
7 2 D 0.531296
8 3 A 0.119273
9 3 B 0.303639
10 3 C 0.911700
11 3 D 0.807861