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

如何处理重复记录:同组重复行Value首行留原值其余设为0?

实现重复组内仅首行保留Value原值,其余置0的方法

原始数据

ID     DATE1      DATE2    Value
   1    10JAN2019  10FEB2019    1
   1    10JAN2019  10FEB2019    1
   2    01MAR2020  15MAY2020    0
   3    11MAR2022  18JUN2021    1
   3    11MAR2022  18JUN2021    1
   3    11MAR2022  18JUN2021    1     

目标数据

ID     DATE1      DATE2    Value
   1    10JAN2019  10FEB2019    1
   1    10JAN2019  10FEB2019    0
   2    01MAR2020  15MAY2020    0
   3    11MAR2022  18JUN2021    1
   3    11MAR2022  18JUN2021    0
   3    11MAR2022  18JUN2021    0    

可以用以下几种常见方法实现需求:

方法一:SQL(支持窗口函数的数据库,如MySQL 8.0+、PostgreSQL、SQL Server等)

利用ROW_NUMBER()窗口函数,按ID、DATE1、DATE2分组后给每组内的行编号,仅保留首行的原Value,其余行设为0:

SELECT 
    ID,
    DATE1,
    DATE2,
    CASE WHEN ROW_NUMBER() OVER (PARTITION BY ID, DATE1, DATE2 ORDER BY (SELECT NULL)) = 1 
         THEN Value 
         ELSE 0 
    END AS Value
FROM your_table_name;

注:ORDER BY (SELECT NULL)是为了保留数据原有顺序,若需要按特定字段排序调整行号,替换成对应的字段即可。

方法二:Python Pandas

通过duplicated()函数标记重复组内的非首行,再将这些行的Value设为0:

import pandas as pd

# 构造示例DataFrame(实际场景可从文件/数据库读取)
df = pd.DataFrame({
    'ID': [1,1,2,3,3,3],
    'DATE1': ['10JAN2019','10JAN2019','01MAR2020','11MAR2022','11MAR2022','11MAR2022'],
    'DATE2': ['10FEB2019','10FEB2019','15MAY2020','18JUN2021','18JUN2021','18JUN2021'],
    'Value': [1,1,0,1,1,1]
})

# 标记重复组内的非首行
mask = df.duplicated(subset=['ID', 'DATE1', 'DATE2'], keep='first')
# 将标记行的Value设为0
df.loc[mask, 'Value'] = 0

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:40:12