python - 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 为红色或黑色)
谢谢!
解决方案
你可以query
你的数据框:
L1 = ['A', 'B']
L2 = ['Red', 'BLACK']
res1 = df.query('Category in @L1')
res2 = df.query('Sub_Category == "B1" and Color in @L2')
推荐阅读
- python - 如何在游戏的 GUI 中添加时间(滴答声)
- css - 我需要改变一个班级的风格
- ruby-on-rails - 在 Heroku 上,我可以使用 Rails 将生成的音频文件返回到我的 React Native 前端吗?
- reactjs - Redux 不会从 API 请求中获取数据
- c++ - 指向类的不同组件的指针
- encryption - 如何在 gatsby-config.js 中使用 AWS Amplify 环境变量?
- angular - Angular Material Table如何将对象传递给displayedColumns而不是数组
- python - 如何修复'没有名为'whitenoise'的模块?
- python - 如何仅使用 glob 搜索当前工作目录而不是子目录
- javascript - 使用自定义 webpack 配置使用 scss 块编译 Vue.js 单文件组件时出错