python - 如何根据字典键和值过滤熊猫数据框行?
问题描述
我在 Python 中有一个数据框和一个字典,如下所示,我需要根据字典过滤数据框。如您所见,字典的键和值是数据框的两列。我想要一个数据框的子集,其中包含字典的键和值以及其他列。
东风:
客户ID | 类别 | 类型 | 送货 |
---|---|---|---|
40275 | 书 | 买 | 真的 |
40275 | 软件 | 卖 | 错误的 |
40275 | 电子游戏 | 卖 | 错误的 |
40275 | 手机 | 卖 | 错误的 |
39900 | 光盘/DVD | 卖 | 真的 |
39900 | 书 | 买 | 真的 |
39900 | 软件 | 卖 | 真的 |
35886 | 手机 | 卖 | 错误的 |
35886 | 电子游戏 | 买 | 错误的 |
35886 | 光盘/DVD | 卖 | 错误的 |
35886 | 软件 | 卖 | 错误的 |
40350 | 软件 | 卖 | 真的 |
28129 | 软件 | 买 | 错误的 |
字典是:
d = {
40275: ['Book','Software'],
39900: ['Book'],
35886: ['Software'],
40350: ['Software'],
28129: ['Software']
}
我需要以下数据框:
客户ID | 类别 | 类型 | 送货 |
---|---|---|---|
40275 | 书 | 买 | 真的 |
40275 | 软件 | 卖 | 错误的 |
39900 | 书 | 买 | 真的 |
35886 | 软件 | 卖 | 错误的 |
40350 | 软件 | 卖 | 真的 |
28129 | 软件 | 买 | 错误的 |
解决方案
展平字典并创建一个新的数据框,然后在内部merge
df
使用新的数据框
df.merge(pd.DataFrame([{'Customer_ID': k, 'Category': i}
for k, v in d.items() for i in v]))
Customer_ID Category Type Delivery
0 40275 Book Buy True
1 40275 Software Sell False
2 39900 Book Buy True
3 35886 Software Sell False
4 40350 Software Sell True
5 28129 Software Buy False
推荐阅读
- pandas - 当系列为时间时,如何正确显示 matplotlib 直方图的 x 轴?
- azure - 创建 Azure Kubernetes 入口控制器以限制每个 pod 1 个连接
- firebase - @google-cloud/logging 导致错误:无法加载默认凭据
- ssl - Istio + Kubernetes:网关多于一个 TLS 证书
- asp.net-core-webapi - 在大型应用程序中指定路由的最佳实践
- php - Laravel 迁移时的 PDOException::("could not find driver")。PHP 版本是 7.3.7。扩展名在 php.ini 中未注释。不知道还能做什么
- node.js - Nodejs Cognito cognitoUser.authenticateUser() 在 lambda 上获得 502 bad gateway
- autodesk-forge - 是否可以通过 Revit API 或 FORGE API 在 Revit 模型中加载新的 Cloud (BIM 360) 链接?
- python - Dango 2.2 使用关键字参数反转“激活”
- phpstorm - WebStorm 和 PhpStorm 中所有项目的相同 SFTP 远程主机