使用seaborn绘制多级索引列的Jointplot

3

I have this dataframe :

df = pd.DataFrame({'col1': ['A', 'A', 'B', 'B', 'B'], 'col2': ['A1', 'B1', 'B1', 'B1', 'A1']})

              col1  col2

0   A   A1
1   A   B1
2   B   B1
3   B   B1
4   B   A1

我进行了分组。结果是多级索引列。

df = df.groupby(['col1']).agg({'col2': ['nunique','count']})

       col2
       nunique   count
 col1       
 A     2           2
 B     2           3

然后,我使用seaborn库进行了联合分布图的绘制。

sns.jointplot(x=['col2','nunique'],y=['col2','count'],data=df,kind='scatter')

我遇到了这个错误。
TypeError: only integer scalar arrays can be converted to a scalar index

我的问题是:
是否有一种方法可以将多重索引列拆分为两个单独的列,就像这样?
col1  col2_unique col2_count        
 A     2           2
 B     2           3

有没有一种方法可以联合绘制多级索引列的图形?

谢谢您的帮助!

1个回答

1
您可以通过在列表中指定列col2并且在agg中仅使用聚合函数来避免将MultiIndex应用于列,从而更改聚合。
df = df.groupby(['col1'])['col2'].agg(['nunique','count'])
print(df)
      nunique  count
col1                
A           2      2
B           2      3

sns.jointplot(x='nunique', y='count', data=df, kind='scatter')

如果需要在agg中使用字典,可以将MultiIndex展平,例如聚合另一列:
df = df.groupby(['col1']).agg({'col2': ['nunique','count'], 'col1':['min']})

df.columns = df.columns.map('_'.join)
print (df)
     col1_min  col2_nunique  col2_count
col1                                   
A           A             2           2
B           B             2           3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接