如何基于(元组的)列表中存在的多个列值有效地选择行?

时间:2019-06-24 16:19:46

标签: python pandas

我有一个带有两列store_idproduct_store_id的DataFrame,我需要根据元组列表检查其值

products_list = [('ebay','123'),('amazon','789'),..] 

有效地选择仅包含该列表中描述的产品行的行?

我已经尝试过products.loc[products[['store_id','product_store_id']].isin(products_list)] 但是熊猫不喜欢这样(ValueError:无法使用多维键索引)

我如何有效地选择列表中store_idproduct_store_id所在的所有房屋?

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点,比其他方法更容易破解。我的建议是生成一个MultiIndex,它们可以很好地与元组列表一起工作:

# <=0.23
idx = pd.MultiIndex.from_arrays([
    products['store_id'], products['product_store_id']])
# 0.24+
idx = pd.MultiIndex.from_frame(products[['store_id', 'product_store_id']])

products.loc[idx.isin(products_list)]

另一种选择是串联和过滤,

products_list_concat = [''.join(l) for l in products_list]
mask = ((products['store_id'] + products['product_store_id'])
           .isin(products_list_concat))

products.loc[mask]