考虑以下熊猫数据框:
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。如果没有为层次结构/属性的任何级别提供选项,请考虑允许所有选项。
例如
类别= ['A','B'](A或B)的所有产品
Sub_Category = ['B1']和Color = ['Red','Black'](红色或黑色的B1)的所有产品
谢谢!
答案 0 :(得分:3)
您可以query
您的数据框:
L1 = ['A', 'B']
L2 = ['Red', 'BLACK']
res1 = df.query('Category in @L1')
res2 = df.query('Sub_Category == "B1" and Color in @L2')
答案 1 :(得分:1)
对于您的第一个过滤器。选择您必须使用的Tegory A或B:
df[(df['Category'] == 'A') | (df['Category'] == 'B')]
第二个:
df[(df['Sub_Category'] == 'B1') & ((df['Color'] == 'Red') | (df['Color'] == 'BLACK'))]
答案 2 :(得分:1)
>>> df
Category Color SKU Sub_Category
0 A Red XYZ1 A1
1 A Red XYZ2 A2
2 A BLACK XYZ3 A2
3 B Red ABC1 B1
4 B BLACK ABC2 B1
5 B BLACK ABC3 B2
>>> df[(df['Sub_Category'] == 'B1') & (df.Color.isin(['Red','BLACK']))]
Category Color SKU Sub_Category
3 B Red ABC1 B1
4 B BLACK ABC2 B1
并过滤A
中的B
和Category
:
>>> df[df.Category.isin(['A','B'])]
Category Color SKU Sub_Category
0 A Red XYZ1 A1
1 A Red XYZ2 A2
2 A BLACK XYZ3 A2
3 B Red ABC1 B1
4 B BLACK ABC2 B1
5 B BLACK ABC3 B2
答案 3 :(得分:0)
当我开始使用Pandas时,我发现构建和链接小块非常有用且易读:
例如
#1. Select Category A or B: Pandas uses | for or and & for and.
categoryA = df['Category'] == 'A'
categoryB = df['Category'] == 'B'
catAorB = categoryA | categoryB
df[catAorB]
#2. All products where Sub_Category = ['B1'] and Color = ['Red', 'Black'] (a B1 that is either Red or Black).
subCatB1 = df['Sub_Category'] == 'B1'
colorRed = df['Color'] == 'Red'
colorBlack = df['Color'] == 'BLACK'
colRedorBlack = colorRed | colorBlack
subCatB1andRB = subCatB1 & colRedorBlack
df[subCatB1andRB]