为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信