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

如何基于DataFrame标识列汇总BasePay并对比警消部门平均薪资

警察与消防部门BasePay平均值对比实现方法

现有数据集结构

数据集包含以下列:

Index(['Id', 'EmployeeName', 'JobTitle', 'BasePay', 'OvertimePay', 'OtherPay',
       'Benefits', 'TotalPay', 'TotalPayBenefits', 'Year', 'Notes', 'Agency',
       'Status'],
      dtype='object')

预处理:标记警察/消防职位

已经通过以下代码创建了isPolice和isFire布尔列,标记职位是否属于对应部门:

def find_police(x):
    return "POLICE" in x
def find_fire(x):
    return 'FIRE' in x

# 用apply在JobTitle中匹配
sf_sal["isPolice"] = sf_sal["JobTitle"].apply(find_police)
sf_sal["isFire"] = sf_sal["JobTitle"].apply(find_fire)

# 查看结果
sf_sal[["JobTitle", "isPolice", "isFire"]]

掩码筛选法的修正

你之前尝试的掩码筛选法有个小错误:计算消防部门平均BasePay时,分母误用了ratio_of_police,应该换成ratio_of_fire。修正后的代码如下:

# 统计两类职位的人数
count_police = sf_sal["isPolice"].sum()
count_fire = sf_sal["isFire"].sum()

# 计算警察部门平均BasePay
police_mask = sf_sal['isPolice'] == True
police_base_sum = sf_sal[police_mask]['BasePay'].sum()
print(police_base_sum / count_police)

# 计算消防部门平均BasePay
fire_mask = sf_sal['isFire'] == True
fire_base_sum = sf_sal[fire_mask]['BasePay'].sum()
print(fire_base_sum / count_fire)

groupby简洁实现方法

用groupby可以更高效地完成对比,推荐两种方式:

方式1:创建统一的部门列后分组

先新增一列标记员工所属部门(非警察/消防的标记为其他),再按部门分组计算平均BasePay:

# 新增部门列
sf_sal['Department'] = sf_sal.apply(lambda row: 'Police' if row['isPolice'] else ('Fire' if row['isFire'] else 'Other'), axis=1)

# 分组计算平均BasePay
dept_avg_basepay = sf_sal.groupby('Department')['BasePay'].mean()

# 仅查看警察和消防的结果
print(dept_avg_basepay[['Police', 'Fire']])

方式2:直接基于布尔列分组

如果只想对比警察和消防,也可以直接对两个布尔列分别计算均值,或者构造分组条件:

# 方法A:分别计算
police_avg = sf_sal[sf_sal['isPolice']]['BasePay'].mean()
fire_avg = sf_sal[sf_sal['isFire']]['BasePay'].mean()
print(f"警察部门平均BasePay: {police_avg}")
print(f"消防部门平均BasePay: {fire_avg}")

# 方法B:用groupby一次性计算
# 先构造分组键:把isPolice和isFire转换成可分组的标签
sf_sal['Group'] = sf_sal.apply(lambda x: 'Police' if x['isPolice'] else 'Fire' if x['isFire'] else None, axis=1)
# 过滤掉非警察/消防的行,再分组求均值
result = sf_sal.dropna(subset=['Group']).groupby('Group')['BasePay'].mean()
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:00:46