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

Python Pandas如何根据缺勤条件为DataFrame填充attendence_score列

出勤分数计算实现方案

你可以直接用pandas内置的分箱或条件匹配函数实现,不需要写多层嵌套if判断,以下是两种可直接运行的实现方式:

方案1:使用pd.cut(推荐,最适配区间映射需求)

这类连续区间映射的场景是pd.cut的典型适用场景,代码简洁易维护:

import pandas as pd
import numpy as np

# 定义区间边界,默认右闭,刚好匹配你的规则:(-1,0]对应0缺勤,(0,5]对应1-5缺勤,以此类推
bins = [-1, 0, 5, 10, 15, 20, np.inf]
# 定义每个区间对应的分数,顺序和区间一一对应
score_labels = [5, 4, 3, 2, 1, 0]

# 生成新列,astype(int)是将返回的分类类型转为整数方便后续计算
df['attendence_score'] = pd.cut(df['absenses'], bins=bins, labels=score_labels).astype(int)

如果你的absenses字段存在空值,可在末尾加.fillna(0)将空值对应的出勤分设为0。

方案2:使用np.select(适合偏好条件判断写法的场景)

如果你更习惯用条件判断的逻辑实现,可以用np.select替代多层if嵌套,可读性更高:

import numpy as np

# 定义所有匹配条件,顺序和分数一一对应
conditions = [
    df['absenses'] == 0,
    df['absenses'].between(1, 5),
    df['absenses'].between(6, 10),
    df['absenses'].between(11, 15),
    df['absenses'].between(16, 20),
    df['absenses'] >= 21
]
# 定义条件对应的分数
scores = [5, 4, 3, 2, 1, 0]

df['attendence_score'] = np.select(conditions, scores)

如果需要处理空值,可添加default=0参数将未匹配到条件(含空值)的行默认设为0分:

df['attendence_score'] = np.select(conditions, scores, default=0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 00:36:04