我正在研究一個從 SQL 轉移到 Python 的分配專案,因為我認為這最好用 Python 處理。所以我下面有2張桌子。第一個需求表是我有每個合作伙伴、每個商店所需物品的地方,我根據他們需要的數量對它們進行了排名,目標是首先向最需要的商店供應。第二個表是我有可用供應數量的地方。
第三個輸出表是我對 python 代碼的目標輸出。如何在 python 上為此撰寫一個簡短的 while 代碼回圈以獲取輸出表?(考慮到有數千個合作伙伴 ID 和 ITEM_ID)。我在考慮 while 語法,但如果您有其他建議,請隨意!
需要_TBL
| 合作伙伴ID | ITEM_ID | 店鋪 | 需要 | NEED_RANK |
|---|---|---|---|---|
| 1 | ID32 | 621 | 57 | 1 |
| 1 | ID32 | 321 | 9 | 2 |
| 1 | ID32 | 315 | 3 | 3 |
| 1 | ID32 | 732 | 1 | 4 |
| 2 | ID32 | 443 | 5 | 1 |
| 2 | ID32 | 321 | 2 | 2 |
SUPPLY_TBL
| 合作伙伴ID | ITEM_ID | 供應 |
|---|---|---|
| 1 | ID32 | 57 |
| 2 | ID32 | 6 |
輸出表
| 合作伙伴ID | ITEM_ID | 店鋪 | 需要 | NEED_RANK | RECEIVED_SUPPLY |
|---|---|---|---|---|---|
| 1 | ID32 | 621 | 57 | 1 | 57 |
| 1 | ID32 | 321 | 9 | 2 | 0 |
| 1 | ID32 | 315 | 3 | 3 | 0 |
| 1 | ID32 | 732 | 1 | 4 | 0 |
| 2 | ID32 | 443 | 5 | 1 | 5 |
| 2 | ID32 | 321 | 2 | 2 | 1 |
uj5u.com熱心網友回復:
你可以使用熊貓來做到這一點:
import pandas as pd
import sqlite3
conn = sqlite3.connect('your_database.db')
df1 = pd.read_sql('SELECT * FROM table1', conn)
df2 = pd.read_sql('SELECT * FROM table2', conn)
df_final = df1.merge(df2, on = ["PARTNER_ID", "ITEM_ID"], how="left")
uj5u.com熱心網友回復:
merge資料框groupby并cumsum獲取每個 PARTNER_ID 和 ITEM_ID 所需的總數量。- 計算提供的數量并用于
clip限制負值。
merged = need_tbl.merge(supply_tbl, on=["PARTNER_ID", "ITEM_ID"], how="left")
total_need = merged.groupby(["PARTNER_ID", "ITEM_ID"])["NEED"].transform("cumsum")
merged["RECEIVED_SUPPLY"] = (merged["NEED"]-(total_need-merged["SUPPLY"]).clip(0)).clip(0)
merged = merged.drop("SUPPLY", axis=1)
>>> merged
PARTNER_ID ITEM_ID STORE NEED NEED_RANK RECEIVED_SUPPLY
0 1 ID32 621 57 1 57
1 1 ID32 321 9 2 0
2 1 ID32 315 3 3 0
3 1 ID32 732 1 4 0
4 2 ID32 443 5 1 5
5 2 ID32 321 2 2 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346750.html
上一篇:向SELECT添加自定義值
下一篇:如何使用多個復選框撰寫查詢
