• 每日一题31:数据统计之即时配送食物


    一、每日一题

    配送表: Delivery

    +-----------------------------+---------+
    | Column Name                 | Type    |
    +-----------------------------+---------+
    | delivery_id                 | int     |
    | customer_id                 | int     |
    | order_date                  | date    |
    | customer_pref_delivery_date | date    |
    +-----------------------------+---------+
    delivery_id 是表的主键(具有唯一值的列)。
    该表保存着顾客的食物配送信息,顾客在某个日期下了订单,并指定了一个期望的配送日期(和下单日期相同或者在那之后)。
    

    如果顾客期望的配送日期和下单日期相同,则该订单称为 「即时订单」,否则称为「计划订单」。

    编写解决方案统计即时订单所占的百分比, 保留两位小数。

    返回结果如下所示。

    示例 1:

    输入:
    Delivery 表:
    +-------------+-------------+------------+-----------------------------+
    | delivery_id | customer_id | order_date | customer_pref_delivery_date |
    +-------------+-------------+------------+-----------------------------+
    | 1           | 1           | 2019-08-01 | 2019-08-02                  |
    | 2           | 5           | 2019-08-02 | 2019-08-02                  |
    | 3           | 1           | 2019-08-11 | 2019-08-11                  |
    | 4           | 3           | 2019-08-24 | 2019-08-26                  |
    | 5           | 4           | 2019-08-21 | 2019-08-22                  |
    | 6           | 2           | 2019-08-11 | 2019-08-13                  |
    +-------------+-------------+------------+-----------------------------+
    输出:
    +----------------------+
    | immediate_percentage |
    +----------------------+
    | 33.33                |
    +----------------------+
    解释:2 和 3 号订单为即时订单,其他的为计划订单。

    解答:

    1. import pandas as pd
    2. # 创建示例数据
    3. data = {
    4. "delivery_id": [1, 2, 3, 4, 5, 6],
    5. "customer_id": [1, 5, 1, 3, 4, 2],
    6. "order_date": ["2019-08-01", "2019-08-02", "2019-08-11", "2019-08-24", "2019-08-21", "2019-08-11"],
    7. "customer_pref_delivery_date": ["2019-08-02", "2019-08-02", "2019-08-11", "2019-08-26", "2019-08-22", "2019-08-13"]
    8. }
    9. df = pd.DataFrame(data)
    10. # 假如data中的数据储存不是时间类型,需要转换;反之,不需要这部分代码
    11. df['order_date'] = pd.to_datetime(df['order_date'])
    12. df['customer_pre_delivery_date'] = pd.to_datetime(df['customer_pref_delivery_date'])
    13. # 计算即时账单
    14. immediate_orders = df[df['order_date'] == df['customer_pref_delivery_date']].shape[0]
    15. # 计算总订单数
    16. total_orders = df.shape[0]
    17. # 计算即时订单百分比
    18. immediate_percentage = (immediate_orders / total_orders) * 100
    19. # 创建结果DataFrame
    20. result = pd.DataFrame({'immediate_percentage': [round(immediate_percentage, 2)]})
    21. # 显示结果
    22. print(result)

    二、总结

    这里用到了字符串转时间类型。可参考之前的博客:

    python格式转换与时间类型

    2024.6.3

  • 相关阅读:
    clickhouse在风控-风险洞察领域的探索与实践
    数据库高级 V
    I.MX6U-ALPHA开发板(高精度定时器)
    FPGA可重配置原理及实现(1)——导论
    wpf C# 用USB虚拟串口最高速下载大文件 每包400万字节 平均0.7s/M,支持批量多设备同时下载。自动识别串口。源码示例可自由定制。
    软考 系统架构设计师系列知识点之软件质量属性(3)
    【无标题】
    升级PIP
    【Effective Modern Cpp】条款9:优先考虑别名声明而非typedef
    两种Multisig Wallet的实现
  • 原文地址:https://blog.csdn.net/m0_63227758/article/details/139371149