我有一个带有两列store_id
和product_store_id
的DataFrame,我需要根据元组列表检查其值
products_list = [('ebay','123'),('amazon','789'),..]
有效地选择仅包含该列表中描述的产品行的行?
我已经尝试过products.loc[products[['store_id','product_store_id']].isin(products_list)]
但是熊猫不喜欢这样(ValueError:无法使用多维键索引)
我如何有效地选择列表中store_id
和product_store_id
所在的所有房屋?
答案 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]