首页 > 解决方案 > Python DataFrame 中的多级过滤器

问题描述

考虑以下 Pandas 数据框:

import pandas as pd

products = [{'SKU': 'XYZ1', 'Category': 'A', 'Sub_Category': 'A1', 'Color': 'Red'},
            {'SKU': 'XYZ2', 'Category': 'A', 'Sub_Category': 'A2', 'Color': 'Red'},
            {'SKU': 'XYZ3', 'Category': 'A', 'Sub_Category': 'A2', 'Color': 'BLACK'},
            {'SKU': 'ABC1', 'Category': 'B', 'Sub_Category': 'B1', 'Color': 'Red'},
            {'SKU': 'ABC2', 'Category': 'B', 'Sub_Category': 'B1', 'Color': 'BLACK'},
            {'SKU': 'ABC3', 'Category': 'B', 'Sub_Category': 'B2', 'Color': 'BLACK'}]

df = pd.DataFrame(products)

产品中的每个 SKU 都是唯一的,并且映射到层次结构(例如类别/子类别)以及属性,例如颜色

我想了解如何能够根据产品主数据上的过滤器来过滤 SKU。如果没有为层次结构/属性的任何级别提供选项,则将所有选项视为允许的。

例如

Category = ['A', 'B'] 的所有产品(A 或 B)

Sub_Category = ['B1'] 和 Color = ['Red', 'Black'] 的所有产品(B1 为红色或黑色)

谢谢!

标签: pythonpandas

解决方案


你可以query你的数据框:

L1 = ['A', 'B']
L2 = ['Red', 'BLACK']

res1 = df.query('Category in @L1')
res2 = df.query('Sub_Category == "B1" and Color in @L2')

推荐阅读