当前位置: 首页 > news >正文

Python自动化处理奖金分摊:基于连续空值的智能分配算法升级

Python自动化处理奖金分摊:基于连续空值的智能分配算法升级

原创 IT小本本 IT小本本 2025年04月04日 02:00 北京

引言

在企业薪酬管理中,团队奖金分配常涉及复杂的分摊规则。传统手工分摊不仅效率低下,还容易因人为疏漏导致分配不公。

本文在算法基础上进行升级,通过增强的空值处理逻辑和性能优化,实现更健壮的奖金分摊自动化方案。

需求:

图片

最终奖金分摊:

图片

源代码:

import pandas as pd
import numpy as npexcel_file = 'bonus_data.xlsx'# 读取Excel文件
df = pd.read_excel(excel_file)# 创建新列用于存储平分后的奖金
df['平分'] = None# 处理数据,查找连续的空值区域并进行分摊
i = 0
while i < len(df):# 如果当前行有奖金值if pd.notna(df.loc[i, '奖金']):current_bonus = df.loc[i, '奖金']start_idx = i# 查找连续的空值区域next_idx = i + 1while next_idx < len(df) and pd.isna(df.loc[next_idx, '奖金']):next_idx += 1# 计算需要分摊的人数num_people = next_idx - start_idx# 如果只有一个人有奖金(没有需要分摊的人)if num_people == 1:df.loc[i, '平分'] = current_bonuselse:# 计算平均奖金avg_bonus = current_bonus / num_people# 为这组人分配平均奖金for j in range(start_idx, next_idx):df.loc[j, '平分'] = avg_bonus# 移动到下一个非空奖金的位置i = next_idxelse:# 如果当前行没有奖金值,跳到下一行i += 1# 处理那些仍然为空的"平分"单元格(处理单独的空值行)
for i in range(len(df)):if pd.isna(df.loc[i, '平分']):# 检查前后是否有非空的"平分"值if i > 0and pd.notna(df.loc[i-1, '平分']):df.loc[i, '平分'] = df.loc[i-1, '平分']elif i < len(df)-1and pd.notna(df.loc[i+1, '平分']):df.loc[i, '平分'] = df.loc[i+1, '平分']# 格式化平分列,去掉小数点后不必要的零
df['平分'] = df['平分'].apply(lambda x: int(x) if pd.notna(x) and x == int(x) else x)# 输出处理后的数据
print(df)

算法核心点

1. 多列空值联合检测

# 支持多列条件的连续空值检测
while next_idx < len(df) and (pd.isna(df.loc[next_idx, '奖金']) |pd.isna(df.loc[next_idx, '部门'])
):next_idx += 1

2. 动态权重分配

# 按业绩系数动态分配
weight_col = df.loc[start_idx:next_idx-1, '业绩系数']
df['平分'] = current_bonus * weight_col / weight_col.sum()

3. 智能空值修复链

# 三级修复策略
df['平分'] = df['平分'].fillna(method='ffill'
).fillna(method='bfill'
).mask(df['奖金'].isna() & df['平分'].eq(df['平分'].shift()),np.nan
)

4. 数据状态标记

# 异常数据自动标记
df['数据状态'] = np.where((df['奖金'] > 1e6) | (df['平分'] < 0),'异常','正常'
)

相关文章:

  • 树莓派超全系列教程文档--(26)在 Raspberry Pi 上配置热点
  • html页面打开后中文乱码
  • 【树莓派Pico FreeRTOS】-事件标志(Event Flags)与事件组(Event Groups)
  • 【SpringBoot】深入解析自定义拦截器、注册配置拦截器、拦截路径方法及常见拦截路径、排除拦截路径、拦截器的执行流程
  • 通过人类和机器人演示进行联合逆向和正向动力学的机器人训练
  • 开源智慧巡检——无人机油田AI视频监控的未来之力
  • 科普:想想神经网络是参数模型还是非参数模型
  • 首次打蓝桥杯总结(c/c++B组)
  • 无人机的群体协同与集群控制技术要点!
  • DIB:Drone in Box- 室内外场景无人机无人化自主巡检技术方案
  • FPAG IP核调用小练习
  • 无人机自主导航与路径规划技术要点!
  • 6.DJI-PSDK:psdk订阅无人机高度/速度/GPS/RTK/时间/经纬度等消息及问题解决
  • Playwright与Selenium详细对比及Playwright快速入门
  • Hadoop:大数据时代的基石
  • A008-Web 功能测试 – 咪咕音乐UI自动化,selenium
  • uniapp的通用页面及组件基本封装
  • 公司内部自建知识共享的方式分类、详细步骤及表格总结,分为开源(对外公开)和闭源(仅限内部),以及公共(全员可访问)和内部(特定团队/项目组)四个维度
  • Android四大组件
  • 视频分析设备平台EasyCVR安防视频管理系统,打造电石生产智能视频监控新体系
  • “五一”假期预计全社会跨区域人员流动累计14.67亿人次
  • 射箭世界杯赛上海站即将开幕,多方联动讲好上海故事
  • 无畏契约新王诞生:属于电竞世界的凯泽斯劳滕奇迹
  • 贵州省黔西市发生载人游船侧翻事故
  • 郭少雄导演逝世,享年82岁
  • 著名医学翻译家王贤才逝世,享年91岁