一、每日一題
配送表:?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 號訂單為即時訂單,其他的為計劃訂單。
解答:
import pandas as pd# 創建示例數據
data = {"delivery_id": [1, 2, 3, 4, 5, 6],"customer_id": [1, 5, 1, 3, 4, 2],"order_date": ["2019-08-01", "2019-08-02", "2019-08-11", "2019-08-24", "2019-08-21", "2019-08-11"],"customer_pref_delivery_date": ["2019-08-02", "2019-08-02", "2019-08-11", "2019-08-26", "2019-08-22", "2019-08-13"]
}df = pd.DataFrame(data)# 假如data中的數據儲存不是時間類型,需要轉換;反之,不需要這部分代碼
df['order_date'] = pd.to_datetime(df['order_date'])
df['customer_pre_delivery_date'] = pd.to_datetime(df['customer_pref_delivery_date'])# 計算即時賬單
immediate_orders = df[df['order_date'] == df['customer_pref_delivery_date']].shape[0]# 計算總訂單數
total_orders = df.shape[0]# 計算即時訂單百分比
immediate_percentage = (immediate_orders / total_orders) * 100# 創建結果DataFrame
result = pd.DataFrame({'immediate_percentage': [round(immediate_percentage, 2)]})# 顯示結果
print(result)
二、總結
這里用到了字符串轉時間類型。可參考之前的博客:
python格式轉換與時間類型
2024.6.3