Python3如何从pandas dataframe中筛选工作日和周末的销售数据
实现方案
核心逻辑
首先将字符串格式的日期列转换为pandas原生datetime类型,之后通过日期的周内属性筛选拆分即可,全程用pandas向量化操作,效率远高于遍历类实现。
基础实现(适合绝大多数场景)
import pandas as pd # 1. 转换日期格式,指定format参数大幅提升转换效率 visitresult_and_outcome['DATEONLY'] = pd.to_datetime( visitresult_and_outcome['DATEONLY'], format='%Y-%m-%d' ) # 2. 拆分数据 # dt.weekday返回值:0=周一、1=周二...4=周五、5=周六、6=周日 weekday_df = visitresult_and_outcome[visitresult_and_outcome['DATEONLY'].dt.weekday < 5].copy() weekend_df = visitresult_and_outcome[visitresult_and_outcome['DATEONLY'].dt.weekday >= 5].copy()
注:如果DATEONLY列已经是datetime64类型,可直接跳过第一步日期转换操作
大数据量优化实现(千万行以上数据集推荐)
仅计算一次周内属性,避免重复计算开销:
# 日期转换步骤同基础实现 visitresult_and_outcome['DATEONLY'] = pd.to_datetime( visitresult_and_outcome['DATEONLY'], format='%Y-%m-%d' ) # 新增临时标记列,仅做一次周内属性计算 visitresult_and_outcome['is_weekend'] = visitresult_and_outcome['DATEONLY'].dt.weekday >= 5 weekday_df = visitresult_and_outcome[~visitresult_and_outcome['is_weekend']].copy() weekend_df = visitresult_and_outcome[visitresult_and_outcome['is_weekend']].copy() # 可选:删除原表中新增的临时标记列,不影响原始数据结构 visitresult_and_outcome.drop('is_weekend', axis=1, inplace=True)
内容的提问来源于stack exchange,提问作者MRT
相关产品推荐
相关产品推荐

