You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas按两列子集去重且要求SOURCE列取值不同的实现方法

Pandas自定义去重实现方案

实现逻辑

核心规则可通过分组识别连续相同source段实现:

  • 按去重键po(对应PO字段)、msn(对应PRODUCT_NUMBER字段)分组
  • 每个分组内给连续相同的source段打相同标记,仅保留最后一个连续source段的所有行,既可以删除更早的不同source重复行,也可以保留同source的所有连续行

完整代码

import pandas as pd
# 构造示例DataFrame
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"]})
# 步骤1:对每个分组的source生成连续段标记
df['source_segment'] = df.groupby(['po', 'msn'])['source'].apply(
    lambda x: (x != x.shift()).cumsum()
)
# 步骤2:仅保留每个分组最后一个source段的所有行
result = df[
    df['source_segment'] == df.groupby(['po', 'msn'])['source_segment'].transform('max')
].drop(columns='source_segment')
# 输出结果
print(result)

运行结果

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

完全符合预期输出要求,如果你的实际数据列名是大写的PO、PRODUCT_NUMBER、SOURCE,替换代码中对应列名即可。

内容的提问来源于stack exchange,提问作者Vega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:39:04