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

news2025/5/24 18:46:06

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

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

引言

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

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

需求:

图片

最终奖金分摊:

图片

源代码:

import pandas as pd
import numpy as np



excel_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 + 1
        while 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_bonus
        else:
            # 计算平均奖金
            avg_bonus = current_bonus / num_people
            # 为这组人分配平均奖金
            for j in range(start_idx, next_idx):
                df.loc[j, '平分'] = avg_bonus
        
        # 移动到下一个非空奖金的位置
        i = next_idx
    else:
        # 如果当前行没有奖金值,跳到下一行
        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),
    '异常',
    '正常'
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2336637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI工具箱源码+成品网站源码+springboot+vue

大家好&#xff0c;今天给大家分享一个靠AI广告赚钱的项目&#xff1a;AI工具箱成品网站源码&#xff0c;源码支持二开&#xff0c;但不允许转售&#xff01;&#xff01; 本人专门为小型企业和个人提供的解决方案。 不懂技术的也可以直接部署工具箱网站&#xff0c;成为站长&…

如何下载免费地图数据?

按照以下步骤下载免费地图数据。 1、安装GIS地图下载器 从GeoSaaS&#xff08;.COM&#xff09;官网下载“GIS地图下载器”软件&#xff1a;&#xff0c;安装完成后桌面上出现”GIS地图下载器“图标。 双击桌面图标打开”GIS地图下载器“ 2、下载地图数据 点击主界面底部的“…

IO 口作为外部中断输入

外部中断 1. NVIC2. EXTI 1. NVIC NVIC即嵌套向量中断控制器&#xff0c;它是内核的器件&#xff0c;M3/M4/M7 内核都是支持 256 个中断&#xff0c;其中包含了 16 个系统中断和 240 个外部中断&#xff0c;并且具有 256 级的可编程中断设置。然而芯片厂商一般不会把内核的这些…

《MySQL基础:了解MySQL周边概念》

1.登录选项的认识 -h&#xff1a;指明登录部署了mysql服务的主机&#xff0c;默认为127.0.0.1-P&#xff1a;指明要访问的端口号&#xff0c;默认为3306-u&#xff1a;指明登录用户-p&#xff1a;指明登录密码 2.什么是数据库 2.1认识数据库 第一点理解。 mysql是数据库的客户…

RCL谐振电压增益曲线

谐振电路如何通过调频实现稳压&#xff1f; 为什么要做谐振&#xff1f; 在谐振状态实现ZVS导通&#xff0c;小电流关断 电压增益GVo/Vin&#xff0c;相当于产出投入比 当ff0时&#xff0c;G1时&#xff0c;输出电压输入电压 当G<1时&#xff0c;输出电压<输入电压 …

JavaScript:表单及正则表达式验证

今天我要介绍的是在JavaScript中关于表单验证内容的知识点介绍&#xff1a; 关于表单验证&#xff0c;我接下来则直接将内容以及效果显示出来并作注解&#xff0c;这样可以清晰看见这个表达验证的妙用&#xff1a; <form id"ff" action"https://www.baidu.…

一、Appium环境安装

找了一圈操作手机的工具或软件&#xff0c;踩了好多坑&#xff0c;最后决定用这个工具(影刀RPA手机用的也是这个)&#xff0c;目前最新的版本是v2.17.1&#xff0c;是基于nodejs环境的&#xff0c;有两种方式&#xff0c;我只试了第一种方式&#xff0c;第二种方式应该是比较简…

【c++深入系列】:new和delete运算符详解

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; “生活不会向你许诺什么&#xff0c;尤其不会向你许诺成功。它只会给你挣扎、痛苦和煎熬的过程。但只要你坚持下去&#xff0c;终有一天&…

正弦波有效值和平均值(学习笔记)

一个周期的正弦波在坐标轴上围的面积有多大&#xff1f; 一般正弦波以 y Asin(wx)表示&#xff0c;其中A为振幅&#xff0c;W为角速度。周期T 2π/w; 确定积分区间是x 0&#xff0c;到x 2π。 计算绝对值积分&#xff1a; 变量代还&#xff1a;wx θ&#xff0c;dx dθ…

第八天 开始Unity Shader的学习之Blinn-Phong光照模型

Unity Shader的学习笔记 第八天 开始Unity Shader的学习之Blinn-Phong光照模型 文章目录 Unity Shader的学习笔记前言一、Blinn-Phong光照模型①计算高光反射部分效果展示 二、召唤神龙:使用Unity内置的函数总结 前言 今天我们编写另一种高光反射的实现方法 – Blinn光照模型…

豆瓣图书数据采集与可视化分析

文章目录 一、适用题目二、豆瓣图书数据采集1. 图书分类采集2. 爬取不同分类的图书数据3. 各个分类数据整合 三、豆瓣图书数据清洗四、数据分析五、数据可视化1. 数据可视化大屏展示 源码获取看下方名片 一、适用题目 基于Python的豆瓣图书数据采集与分析基于Python的豆瓣图书…

常见的爬虫算法

1.base64加密 base64是什么 Base64编码&#xff0c;是由64个字符组成编码集&#xff1a;26个大写字母AZ&#xff0c;26个小写字母az&#xff0c;10个数字0~9&#xff0c;符号“”与符号“/”。Base64编码的基本思路是将原始数据的三个字节拆分转化为四个字节&#xff0c;然后…

YOLOV8 OBB 海思3516训练流程

YOLOV8 OBB 海思3516训练流程 目录 1、 下载带GPU版本的torch(可选) 1 2、 安装 ultralytics 2 3、 下载pycharm 社区版 2 4、安装pycharm 3 5、新建pycharm 工程 3 6、 添加conda 环境 4 7、 训练代码 5 9、配置Ymal 文件 6 10、修改网络结构 9 11、运行train.py 开始训练模…

[MySQL] 事务管理(二) 事务的隔离性底层

事务的隔离性底层 1.数据库并发的场景2.读-写2.1MVCC三个变量2.1.1 3个记录隐藏列字段2.1.2 undo日志 模拟MVCCselect 的读取2.1.3 Read View&#xff08;读视图&#xff09; 3.RR与RC的区别 1.数据库并发的场景 读-读&#xff1a;不存在问题&#xff0c;也不需要并发控制读-写…

20、.NET SDK概述

.NET SDK&#xff08;Software Development Kit&#xff09; 是微软提供的一套开发工具包&#xff0c;用于构建、运行和管理基于 .NET 平台的应用程序。它包含了一组丰富的工具、库和运行时环境&#xff0c;支持开发者在多种操作系统&#xff08;如 Windows、Linux 和 macOS&am…

18-21源码剖析——Mybatis整体架构设计、核心组件调用关系、源码环境搭建

学习视频资料来源&#xff1a;https://www.bilibili.com/video/BV1R14y1W7yS 文章目录 1. 架构设计2. 核心组件及调用关系3. 源码环境搭建3.1 测试类3.2 实体类3.3 核心配置文件3.4 映射配置文件3.5 遇到的问题 1. 架构设计 Mybatis整体架构分为4层&#xff1a; 接口层&#…

冒泡排序、插入排序、快速排序、堆排序、希尔排序、归并排序

目录 冒泡排序插入排序快速排序(未优化版本)快速排序(优化版本)堆排序希尔排序归并排序各排序时间消耗对比 冒泡排序 冒泡排序核心逻辑就是对数组从第一个位置开始进行遍历&#xff0c;如果发现该元素比下一个元素大&#xff0c;则交换位置&#xff0c;如果不大&#xff0c;就…

CD27.【C++ Dev】类和对象 (18)友元和内部类

目录 1.友元 友元函数 几个特点 友元类 格式 代码示例 2.内部类(了解即可) 计算有内部类的类的大小 分析 注意:内部类不能直接定义 内部类是外部类的友元类 3.练习 承接CD21.【C Dev】类和对象(12) 流插入运算符的重载文章 1.友元 友元函数 在CD21.【C Dev】类和…

QT安装详细步骤

下载 清华源 &#xff1a; 清华源 1. 2. 3. 4.

Unity游戏多语言工具包

由于一开始的代码没有考虑多语言场景&#xff0c;导致代码中提示框和UI显示直接用了中文&#xff0c;最近开始提取代码的中文&#xff0c;提取起来太麻烦&#xff0c;所以拓展了之前的多语言包&#xff0c;降低了操作复杂度。最后把工具代码提取出来到单独项目里面&#xff0c;…