Python如何筛选DataFrame中10:00-16:59的记录并计算客户占比
原代码存在的问题
- 直接对字符串
s1、s2做减法是非法操作,无法构造datetime对象用于筛选 - 缺少Time列的类型转换步骤,字符串无法直接和时间阈值做大小比较
- 额外加入了
Gender == 'Female'的筛选条件,如果是统计全量客户占比需要删除,仅统计女性客户占比可以保留
正确实现代码
import pandas as pd from datetime import datetime FMT = '%H:%M' # 转换Time列为time类型,方便后续大小比较 df['Time'] = df['Time'].apply(lambda x: datetime.strptime(x, FMT).time()) # 定义时间区间边界 start_time = datetime.strptime('10:00', FMT).time() end_time = datetime.strptime('16:59', FMT).time() # 筛选符合时间区间的记录,如需仅统计女性可放开注释的性别筛选条件 mask = (df['Time'] >= start_time) & (df['Time'] <= end_time) # mask = (df['Gender'] == 'Female') & (df['Time'] >= start_time) & (df['Time'] <= end_time) time_range_records = df[mask] # 计算占比:时间段内去重客户数 / 总去重客户数,避免同一客户多笔订单重复计数 customer_in_range = time_range_records['CustomerID'].nunique() # 仅统计女性时,总客户数替换为 df[df['Gender'] == 'Female']['CustomerID'].nunique() total_customer = df['CustomerID'].nunique() percentage = round(customer_in_range / total_customer * 100, 2) print(f"10:00-16:59时间段内购买的客户占比为:{percentage}%")
数据样例

内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

