groupby.value_counts()对象标签名问题:无法绘制Seaborn catplot
解决Seaborn Catplot分组计数后的列名问题
问题场景
你将经过pd.melt处理后的DataFrame,按cardio和variable分组并统计value的计数后,得到的DataFrame计数列默认被命名为0,这种自动生成的列名导致Seaborn的catplot无法正常识别,需要将计数列重命名为count,得到结构如下的DataFrame:
cardio variable value count 0 active 1 28643 0 6378 alco 0 33080 1 1941 cholesterol 0 29330 1 5691
解决方案
方法1:重命名已生成的计数列
先完成分组计数并转为DataFrame,再通过rename方法修改列名;如果需要将多级索引转为普通列(方便Seaborn绘图时识别),可以追加reset_index:
# 分组统计value的出现次数 df_cat = df_cat.groupby(['cardio','variable']).value_counts() # 转为DataFrame并重命名计数列为count df_cat2 = df_cat.to_frame().rename(columns={0: 'count'}) # 可选:将多级索引转为普通列(推荐,方便后续绘图) df_cat2 = df_cat2.reset_index()
方法2:直接在计数时指定列名
更简洁的写法,直接通过size方法结合reset_index的name参数指定计数列名:
df_cat2 = df_cat.groupby(['cardio', 'variable', 'value']).size().reset_index(name='count')
如果使用的是Pandas 1.3.0及以上版本,也可以直接在value_counts后用rename指定列名:
df_cat2 = df_cat.groupby(['cardio','variable'])['value'].value_counts().rename('count').reset_index()
绘图示例
处理完成后,即可正常传入Seaborn绘制catplot:
import seaborn as sns sns.catplot(data=df_cat2, x='variable', y='count', hue='value', col='cardio', kind='bar')
内容的提问来源于stack exchange,提问作者Lucio Suppo
相关产品推荐
相关产品推荐

