Pandas 用Altair绘制多索引数据帧

Pandas 用Altair绘制多索引数据帧,pandas,bar-chart,altair,Pandas,Bar Chart,Altair,我有一个数据框,看起来像: data = {'ColA': {('A', 'A-1'): 0, ('A', 'A-2'): 1, ('A', 'A-3'): 1, ('B', 'B-1'): 2, ('B', 'B-2'): 2, ('B', 'B-3'): 0, ('C', 'C-1'): 1

我有一个数据框,看起来像:

data = {'ColA': {('A', 'A-1'): 0,
                 ('A', 'A-2'): 1,
                 ('A', 'A-3'): 1,
                 ('B', 'B-1'): 2,
                 ('B', 'B-2'): 2,
                 ('B', 'B-3'): 0,
                 ('C', 'C-1'): 1,
                 ('C', 'C-2'): 2,
                 ('C', 'C-3'): 2,
                 ('C', 'C-4'): 3},
        'ColB': {('A', 'A-1'): 3,
                 ('A', 'A-2'): 1,
                 ('A', 'A-3'): 1,
                 ('B', 'B-1'): 0,
                 ('B', 'B-2'): 2,
                 ('B', 'B-3'): 2,
                 ('C', 'C-1'): 2,
                 ('C', 'C-2'): 0,
                 ('C', 'C-3'): 3,
                 ('C', 'C-4'): 1}}

df = pd.DataFrame( data )
每列的值为0、1、2或3。这些值可以很容易地为“U”、“Q”、“R”或“Z”。。。i、 e.它们没有本质上的数字特征

我想用

**第一组图表

我希望每列有一个条形图

X轴的标签应基于列中的唯一值。Y轴应为列中唯一值的计数

**第二组图表

与第一组类似,我希望每行获得一个条形图

X轴的标签应基于行中的唯一值。Y轴应为行中唯一值的计数


这应该很容易,但我不知道怎么做。

所有Altair的API都是基于列的,除非明确包含索引,否则忽略索引(请参见Altair文档)

对于第一组图表(每列一个条形图),可以执行以下操作:

alt.Chart(df.reset_index()).mark_bar().encode(
alt.X(alt.repeat(),type='nominal'),
y='count()'
).重复(['ColA','ColB'])

对于第二组图表(每行一个条形图),您可以执行以下操作:

df_transposed=df.reset_索引(0,drop=True).T
alt.Chart(df_转置)。标记条()。编码(
alt.X(alt.repeat(),type='nominal'),
y='count()'
).重复(列表(df_转置列),列=5)


虽然这有点奇怪,所以我怀疑我误解了你的意图。。。您的数据有十行,因此每行一个图表就是十个图表。

谢谢。对于真实数据,第二种可视化更有意义。