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

Pandas中提取Datetime时间进行时段筛选统计购买量失败问题

问题:无法正确筛选datetime字段中的上午/下午购买记录

我明白你遇到的问题了——你已经把purchase_time转成了datetime类型,但直接用df['purchase_time'] < '12:00:00'筛选上午记录时,返回的还是全部数据。这是因为pandas会把字符串'12:00:00'自动解析成「当前日期的中午12点」,而你的数据里的时间都是2007年的,所有旧日期的datetime自然都小于这个新的中午时间,所以筛选条件相当于永远为True。

下面给你几种可行的解决方案,从基础筛选到直接统计总购买量都有:


1. 基础筛选:提取小时判断时段

最简单的方式是利用datetime字段的dt.hour属性,直接判断小时数是否小于12:

# 筛选上午(小时 <12)的记录
morning_purchases = df[df['purchase_time'].dt.hour < 12]
# 筛选下午(小时 >=12)的记录
afternoon_purchases = df[df['purchase_time'].dt.hour >= 12]

2. 更精确的时间比较

如果需要精确到时分秒的比较(比如区分12:00:00整的订单),可以提取时间部分和datetime.time对象比较:

import datetime
# 筛选上午(时间早于12:00:00)的记录
morning_purchases = df[df['purchase_time'].dt.time < datetime.time(12, 0, 0)]

3. 一步到位:统计各时段总购买量

既然你的最终目标是统计上午和下午的总购买量,不需要单独保留筛选后的数据集的话,可以直接用分组统计:

# 先给每条记录标记时段
df['period'] = df['purchase_time'].dt.hour.apply(lambda x: '上午' if x < 12 else '下午')
# 按时段分组求和
period_total = df.groupby('period')['quantity'].sum()

# 输出结果
print(period_total)

针对你的示例数据,运行后会得到:

上午    10
下午    13
dtype: int64

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:28:10