首页 > 解决方案 > 删除包含 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" 必须不同。

所以

最终结果应该是:

采购订单 产品编号 交货时间 数量 资源
1 2 222 2021-09-01 20
2 1 111 2021-09-05 30 C
3 1 111 2021-09-08 40 C

我怎么能用熊猫做到这一点?

标签: pythonpandas

解决方案


试试两个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

推荐阅读