У вас есть данные в широкой форме, тогда как Altair лучше всего работает с данными в полной форме. Для обсуждения этого см. Длинные и широкие данные в документации Altair.
Вы можете изменить форму своих данных в pandas, используя pd.melt
(как показано в ответе @ chthonicdaemon ), или вы можете использовать Altair Fold Transform для изменения формы данных в соответствии со спецификацией вашей диаграммы.
Вот пример подхода на основе преобразования:
import altair as alt
import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[1, 4, 7], [2, 5, 8], [3, 6, 9],
[4, 7, 10], [5, 8, 11]
]), columns=['a', 'b', 'c'])
alt.Chart(df).transform_fold(
['a', 'b', 'c'],
as_=['key', 'value']
).mark_boxplot().encode(
x='key:N',
y='value:Q'
)