【发布时间】:2021-09-12 13:30:56
【问题描述】:
我有两个 Pandas 数据框,分别命名为 table_A 和 table_B:
table_A
| ID | COST | DATE | MONTH |
|---|---|---|---|
| CLSLT88150 | 655.118 | 2019-12-30 | 1 |
| CLSLT88150 | 652.758 | 2019-12-30 | 1 |
table_B
| ID | NUMBER | ORDER | DEVICE |
|---|---|---|---|
| CLSLT88150 | 4.45882e+07 | WO-SLT-GLI-REC-0009-5067 | Apple iPhone XR |
| CLSLT88150 | 4.45882e+07 | WO-SLT-GLI-REC-0009-5786 | Apple iPhone XR |
我想合并列 ID 上的这两个表以获得类似于此表的结果:
table_merge
| ID | COST | DATE | MONTH | ORDER | NUMBER | DEVICE |
|---|---|---|---|---|---|---|
| CLSLT88150 | 655.118 | 2019-12-30 | 1 | WO-SLT-GLI-REC-0009-5067 | 4.45882e+07 | Apple iPhone XR |
| CLSLT88150 | 652.758 | 2019-12-30 | 1 | WO-SLT-GLI-REC-0009-5786 | 4.45882e+07 | Apple iPhone XR |
每个ID可以有多个ORDER。每个 ORDER 只能出现一次,并关联一个唯一的 COST。哪个 COST 与哪个 ORDER 相关联无关紧要,因此该表也可能是可接受的结果:
| ID | COST | DATE | MONTH | ORDER | NUMBER | DEVICE |
|---|---|---|---|---|---|---|
| CLSLT88150 | 652.758 | 2019-12-30 | 1 | WO-SLT-GLI-REC-0009-5067 | 4.45882e+07 | Apple iPhone XR |
| CLSLT88150 | 655.118 | 2019-12-30 | 1 | WO-SLT-GLI-REC-0009-5786 | 4.45882e+07 | Apple iPhone XR |
我已使用以下脚本将 合并 table_A 与 table_B:
table_merge = table_A.merge(table_B)
得到这个不想要的结果:
| ID | COST | DATE | MONTH | ORDER | NUMBER | DEVICE |
|---|---|---|---|---|---|---|
| CLSLT88150 | 655.118 | 2019-12-30 | 1 | WO-SLT-GLI-REC-0009-5067 | 4.45882e+07 | Apple iPhone XR |
| CLSLT88150 | 655.118 | 2019-12-30 | 1 | WO-SLT-GLI-REC-0009-5786 | 4.45882e+07 | Apple iPhone XR |
| CLSLT88150 | 652.758 | 2019-12-30 | 1 | WO-SLT-GLI-REC-0009-5067 | 4.45882e+07 | Apple iPhone XR |
| CLSLT88150 | 652.758 | 2019-12-30 | 1 | WO-SLT-GLI-REC-0009-5786 | 4.45882e+07 | Apple iPhone XR |
我尝试使用此脚本删除不需要的行,但失败了:
table_merge = table_merge.drop_duplicates(subset=['ORDER','ID'])
删除重复后 table_merge 看起来像这样:
| ID | COST | DATE | MONTH | ORDER | NUMBER | DEVICE |
|---|---|---|---|---|---|---|
| CLSLT88150 | 655.118 | 2019-12-30 | 1 | WO-SLT-GLI-REC-0009-5067 | 4.45882e+07 | Apple iPhone XR |
| CLSLT88150 | 655.118 | 2019-12-30 | 1 | WO-SLT-GLI-REC-0009-5786 | 4.45882e+07 | Apple iPhone XR |
可以看出,COST 655.118 重复了,而另一个 COST 的 652.758 缺失。
我怎样才能得到想要的结果?
谢谢。
【问题讨论】:
-
选择不同成本的业务规则是什么?
-
@Umar.H 成本选择没有特别的规则。我认为它对这项任务无动于衷。唯一的规则是 ORDER 必须是唯一的,并且与唯一的 COST 相关联。
-
@Umar.H 不,此脚本不起作用,因为 ORDER 重复。
-
@GGS 删除重复项后,一个订单以 5067 结束,而另一个以 5786 结束。这不是预期的行为吗?
-
@GGS 对我来说似乎是一个很好的解决方案 :)
标签: python pandas merge duplicates