亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python:為 eactly 2 PROD_ID 查找 ORDER_ID

Python:為 eactly 2 PROD_ID 查找 ORDER_ID

暮色呼如 2022-11-09 16:28:05
我有下面的python列表列表。我需要找出僅訂購 P1 和 P2(除了 P1 和 P2)產品的 order_ids。預期答案:5 和 9# ORDER_ID, PROD_ID, ORDER_DT, QUANTITYorders = [[9, 'P1', '2020-01-01', 1],[9, 'P2', '2020-01-01', 1],[6, 'P1', '2020-01-01', 1],[6, 'P3', '2020-01-01', 1],[6, 'P4', '2020-01-01', 1],[7, 'P1', '2020-01-01', 1],[7, 'P2', '2020-01-01', 1],[7, 'P3', '2020-01-01', 1],[5, 'P2', '2020-01-01', 1],[5, 'P1', '2020-01-01', 1]]
查看完整描述

2 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

考慮使用pandas- 對于此類任務來說更好:


import pandas as pd


orders = [

[9, 'P1', '2020-01-01', 1],

[9, 'P2', '2020-01-01', 1],

[6, 'P1', '2020-01-01', 1],

[6, 'P3', '2020-01-01', 1],

[6, 'P4', '2020-01-01', 1],

[7, 'P1', '2020-01-01', 1],

[7, 'P2', '2020-01-01', 1],

[7, 'P3', '2020-01-01', 1],

[5, 'P2', '2020-01-01', 1],

[5, 'P1', '2020-01-01', 1]

]


cols="ORDER_ID,PROD_ID,ORDER_DT,QUANTITY".split(",")


df=pd.DataFrame(orders, columns=cols)


res=df.groupby("ORDER_ID")["PROD_ID"].agg(set).eq({'P1', 'P2'})

res=res.loc[res].index


res=df.loc[df["ORDER_ID"].isin(res)]

print(res)


#if you want end up with the numpy:


print(res.to_numpy())


#to get just the order_id-s:


print(res["ORDER_ID"].unique())

輸出:


>>> print(res)


   ORDER_ID PROD_ID    ORDER_DT  QUANTITY

0         9      P1  2020-01-01         1

1         9      P2  2020-01-01         1

8         5      P2  2020-01-01         1

9         5      P1  2020-01-01         1


>>> print(res.to_numpy())


[[9 'P1' '2020-01-01' 1]

 [9 'P2' '2020-01-01' 1]

 [5 'P2' '2020-01-01' 1]

 [5 'P1' '2020-01-01' 1]]


>>> print(res["ORDER_ID"].unique())


[9 5]


查看完整回答
反對 回復 2022-11-09
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

您可以使用itertools.groupby. 這樣,您可以根據訂單 ID 對產品進行分組,然后將所有相關訂單放在一個列表中。然后,您只需要確保產品 ID 匹配。就像是:


from itertools import groupby

from operator import itemgetter


products = []

for key, group in groupby(orders, key=itemgetter((0))):

    if {prod[1] for prod in group} == {'P1', 'P2'}:

        products.append(key)


print(products)

這確實給出了:


[9, 5]

這假設列表orders是根據訂單 ID 排序的,如示例中所示。


查看完整回答
反對 回復 2022-11-09
  • 2 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號