看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)现有一段连续 14 天的原始库存数据,仓库实行“周三到周日上班”的特殊班制,要求从中仅保留工作日的行。
源数据如下:
import pandas as pd
# 9-01 到 9-14
idx = pd.date_range('2023-09-01', periods=14, freq='D')
# 0~13 仅作标记
s = pd.Series(range(14), index=idx, name='stock')
print(s)
输出:
2023-09-01 0
2023-09-02 1
...
2023-09-14 13
Freq: D, Name: stock, dtype: int64
要求:
pd.offsets.CustomBusinessDay(weekmask='Wed Thu Fri Sat Sun')
创建自定义工作日偏移对象。onOffset()
方法筛选出上班日对应的行。期望结果(仅 10 行):
2023-09-01 0 # Fri
2023-09-02 1 # Sat
2023-09-03 2 # Sun
2023-09-06 5 # Wed
2023-09-07 6 # Thu
2023-09-08 7 # Fri
2023-09-09 8 # Sat
2023-09-10 9 # Sun 9-11 和 9-12 被剔除
2023-09-13 12 # Wed
2023-09-14 13 # Thu
Name: stock, dtype: int64
代码如下:
import pandas as pd
idx = pd.date_range('2023-09-01', periods=14, freq='D')
s = pd.Series(range(14), index=idx, name='stock')
# 自定义工作日:周三-周日
wed_sun = pd.offsets.CustomBusinessDay(weekmask='Wed Thu Fri Sat Sun')
# 筛选工作日
workday_s = s.asfreq(wed_sun)
print(workday_s)
输出:
2023-09-01 0
2023-09-02 1
2023-09-03 2
2023-09-06 5
2023-09-07 6
2023-09-08 7
2023-09-09 8
2023-09-10 9
2023-09-13 12
2023-09-14 13
Name: stock, dtype: int64
CustomBusinessDay.onOffset()
对日期逐点判断是否属于自定义工作日,返回布尔掩码后即可快速筛选出“周三–周日”对应的行,实现按特殊班制提取数据。
(完)
更新时间:2025-09-14 17:56:55 标签:pandas python 时间 工作日