You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python绘图中用hue参数统计标签观测数及计算类别占比

解决方案

1. 绘制分组统计柱状图

可以通过先统计观测数再绘图,或者直接用Seaborn的countplot自动统计,两种方法都能实现需求:

步骤1:导入依赖库并准备数据

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 示例数据集
data = {
    'Group': ['Group A', 'Group B', 'Group B', 'Group A', 'Group A', 'Group B', 'Group B', 'Group A'],
    'Series': ['Series 2', 'Series 1', 'Series 5', 'Series 4', 'Series 1', 'Series 3', 'Series 3', 'Series 2']
}
df = pd.DataFrame(data)

方法一:先统计再绘图(适合大数据集)

用pd.crosstab生成交叉统计表,直接得到每个Group下各Series的观测数,再绘制柱状图:

# 统计每个Group中各Series的行数
count_table = pd.crosstab(df['Group'], df['Series'])

# 绘制柱状图
count_table.plot(kind='bar', figsize=(8, 5), rot=0)
plt.xlabel('Group')
plt.ylabel('观测数')
plt.title('各Group下Series的观测数量')
plt.legend(title='Series')
plt.tight_layout()
plt.show()

方法二:直接用Seaborn自动统计

countplot会自动统计每个分组的观测数,结合hue参数区分Series:

sns.countplot(data=df, x='Group', hue='Series')
plt.xlabel('Group')
plt.ylabel('观测数')
plt.title('各Group下Series的观测数量')
plt.tight_layout()
plt.show()

2. 计算每组内Series的占比并输出

可以写一个自定义函数,通过groupby结合value_counts(normalize=True)计算组内占比,再格式化输出:

def get_series_percentage(df, group_col, series_col):
    # 按Group分组,计算每个Series的组内占比(转为百分比)
    group_pct = df.groupby(group_col)[series_col].value_counts(normalize=True) * 100
    # 遍历每个Group输出结果
    for group in df[group_col].unique():
        pct_items = [f'{round(pct)}% {series}' for series, pct in group_pct[group].items()]
        print(f'{group} : {", ".join(pct_items)}')

# 调用函数,传入数据集和列名
get_series_percentage(df, 'Group', 'Series')

运行后输出示例:

Group A : 33% Series 2, 25% Series 4, 25% Series 1
Group B : 40% Series 3, 20% Series 1, 20% Series 5

内容的提问来源于stack exchange,提问作者CinfaCinfa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:20:42