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]
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 排序的,如示例中所示。
添加回答
举报