python - 删除包含 2 列子集的重复项,但另一列必须不同?
问题描述
我有一个数据框df:
df = pd.DataFrame({
"po": [1, 2, 1, 1]
, "msn": [111, 222, 111, 111]
, "delivery_time": ["2021-09-01", "2021-09-01", "2021-09-05", "2021-09-08", ]
, "amount": [10, 20, 30, 40]
, "source": ["A", "B", "C", "C"]})
采购订单 | 产品编号 | 交货时间 | 数量 | 资源 | |
---|---|---|---|---|---|
0 | 1 | 111 | 2021-09-01 | 10 | 一个 |
1 | 2 | 222 | 2021-09-01 | 20 | 乙 |
2 | 1 | 111 | 2021-09-05 | 30 | C |
3 | 1 | 111 | 2021-09-08 | 40 | C |
我想用 (subset=["PO", "PRODUCT_NUMBER"], keep="last") 删除重复项,但 "SOURCE" 必须不同。
所以
- 第 0 行与第 2 行具有相同的“PO”+“PRODUCT_NUMBER”,但“SOURCE”不同--> 删除第 0 行
- 第 2 行具有与第 3 行相同的“PO”+“PRODUCT_NUMBER”但相同的“SOURCE”-> 保留第 2 行和第 3 行
最终结果应该是:
采购订单 | 产品编号 | 交货时间 | 数量 | 资源 | |
---|---|---|---|---|---|
1 | 2 | 222 | 2021-09-01 | 20 | 乙 |
2 | 1 | 111 | 2021-09-05 | 30 | C |
3 | 1 | 111 | 2021-09-08 | 40 | C |
我怎么能用熊猫做到这一点?
解决方案
试试两个duplicated
out = df[df.duplicated(['po','msn','source'],keep=False) | ~df.duplicated(['po','msn'],keep=False)]
Out[354]:
po msn delivery_time amount source
1 2 222 2021-09-01 20 B
2 1 111 2021-09-05 30 C
3 1 111 2021-09-08 40 C
推荐阅读
- grails - 引起:java.lang.ClassNotFoundException:org.grails.core.cfg.DeprecatedGrailsConfig
- git - 列出 git 标签,不包括标题中的单词
- google-chrome - Chrome 视频标签无法播放碎片化的 mp4 流
- python - Pandas df 上的 Python 递归
- python - 如何计算算法完成迷宫所采取的步骤数
- laravel - Laravel 7-“未定义索引:电子邮件”,尝试发送电子邮件时
- python - Django 呈现具有大量选择的页面。这能更快吗?
- sql - 查询数据库中所有表的不同/唯一值计数 - MS SQL Server
- php - 提交表单复选框值而不刷新页面Ajax php
- python - PyEMU - 来自 MODFLOW6 2D 横截面模型的 add_parameters()