Pandas DataFrame中如何判断商品是否在上架后24小时内售出?
实现方案
你写的代码存在的几个问题
- 还没创建
sold_in_24列就直接遍历这列,运行时会直接报列不存在的错误 - 两个日期列相减得到的是
Timedelta时间差对象,不能直接和数字24做大小比较,会引发类型不匹配报错 - 你写的列表推导只给符合时间差≤24的场景赋值,没有覆盖超过24小时的情况,最后生成的列表长度和DataFrame行数对不上,没法正常赋值
具体实现步骤
- 先把两个日期列转成标准的datetime格式,避免字符串格式没法计算时间差:
df['list_date'] = pd.to_datetime(df['list_date']) df['sold_date'] = pd.to_datetime(df['sold_date']) - 直接用pandas自带的向量化运算生成标记,不用写循环,数据量大的时候速度比列表推导快很多:
# 判断售出和上架的时间差是否在24小时内,把布尔结果转成1/0整数 df['sold_in_24'] = ((df['sold_date'] - df['list_date']) <= pd.Timedelta(hours=24)).astype(int)
结果校验
这套代码跑出来的结果和你给的示例完全匹配:
- 上架后4小时就售出的商品,标记为
1 - 上架16天后才售出的商品,标记为
0 - 上架后20小时售出的商品,标记为
1 - 如果数据里存在未售出(sold_date为空值)的商品,代码会自动把这类商品的标记判定为0,不需要额外加逻辑处理
内容的提问来源于stack exchange,提问作者A99
相关产品推荐
相关产品推荐

