看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)考勤系统每天固定 3 个班次,员工打卡时间需要匹配到最近一次班次:
import pandas as pd
# 员工打卡
clock = pd.DataFrame({
"员工": ["张三", "李四", "王五"],
"打卡时间": pd.to_datetime(["2024-08-05 08:55", "2024-08-05 09:30", "2024-08-05 10:45"])
})
# 班次表
shift = pd.DataFrame({
"班次": ["早班", "中班", "晚班"],
"开始时间": pd.to_datetime(["2024-08-05 09:00", "2024-08-05 10:30", "2024-08-05 14:00"])
})
用 一行 merge_asof()
把打卡记录与班次 向前就近 匹配,结果保留所有打卡行。
result = pd.merge_asof(
clock.sort_values("打卡时间"),
shift.sort_values("开始时间"),
left_on="打卡时间",
right_on="开始时间",
direction="forward"
)
print(result)
输出:
员工 打卡时间 班次 开始时间
0 张三 2024-08-05 08:55:00 早班 2024-08-05 09:00:00
1 李四 2024-08-05 09:30:00 中班 2024-08-05 10:30:00
2 王五 2024-08-05 10:45:00 晚班 2024-08-05 14:00:00
(完)
更新时间:2025-08-28 14:15:37 标签:pandas python 匹配 合并