你可以
groupby.apply
一个lambda,用于检查每个“订单号”的唯一“项目id”是否同时包含“a”和“B”;然后过滤那些可以:
out = df.groupby('Order_number')['item_id'].apply(lambda x: {'A','B'}.issubset(x.unique().tolist())).pipe(lambda x: x.index[x]).tolist()
另一个选择是使用
groupby.any
两次一次用于“A”,另一次用于“B”,以创建布尔级数对象,如果
item_id
Order_number
; 既然我们想要两者都存在,我们就使用
&
out = (df['item_id'].eq('A').groupby(df['Order_number']).any() & df['item_id'].eq('B').groupby(df['Order_number']).any()).pipe(lambda x: x.index[x].tolist())
输出:
[12345, 84573]