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

Python使用Altair绘制柱状图如何仅展示平均薪资排名前10的公司

解决方案

你可以通过以下两种方式实现仅展示平均薪资前10的公司:

方案1:提前用Pandas预处理数据(更直观易维护)

先对原始数据做聚合排序取前10,再传入Altair绘图:

import pandas as pd

# 按公司分组计算平均薪资,降序排序后取前10
top10_company_df = final1.groupby('company', as_index=False)['salary'].mean()\
                        .sort_values('salary', ascending=False)\
                        .head(10)

# 基于处理后的数据绘图
alt.Chart(top10_company_df, title="Avg salary for IT Project Manager I in each company").mark_bar(size=20).encode(
    alt.X("company:N", sort="-y"),
    alt.Y("salary:Q", title="average(salary)"),
    color=alt.condition(
        alt.datum.company == 'Celerity',  
        alt.value('orange'),     
        alt.value('steelblue')   
    )
).properties(width=800)

方案2:使用Altair内置转换算子(无需修改原数据)

通过Altair自带的聚合、窗口、过滤算子直接在绘图逻辑中实现筛选:

alt.Chart(final1, title="Avg salary for IT Project Manager I in each company").mark_bar(size=20).encode(
    alt.X("company:N", sort="-y"),
    alt.Y("avg_salary:Q", title="average(salary)"),
    color=alt.condition(
        alt.datum.company == 'Celerity',  
        alt.value('orange'),     
        alt.value('steelblue')   
    )
).transform_aggregate(
    # 按公司分组计算平均薪资
    avg_salary='average(salary)',
    groupby=['company']
).transform_window(
    # 按平均薪资降序生成排名
    rank='rank(avg_salary)',
    sort=[alt.SortField('avg_salary', order='descending')]
).transform_filter(
    # 筛选排名前10的公司
    alt.datum.rank <= 10
).properties(width=800)

注意事项

如果存在多公司平均薪资相同的并列情况,rank()函数会将并列项算为同一名次,最终展示的公司数量可能略多于10。如果需要严格限制为10条,可将窗口函数中的rank替换为row_number(),即使薪资相同也会按顺序生成唯一排名。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:45:03