【问题标题】:Python DataFrame: Remove duplicates based on condition?Python DataFrame:根据条件删除重复项?
【发布时间】:2021-04-09 15:11:47
【问题描述】:

我有一个带有 namesubject 列的 df。我正在尝试在每个用户的 first 值行之后仅删除 math 值的重复项

            name        subject
    0      mason          first
    1      mason          math
    2      mason          math
    3      mason          first 
    4      mason          chem
    5      mason          math
    6      mason          math
    7       paul          first
    8       paul          chem
    9       paul          first
    10      paul          math
    11      paul          math

最终结果

            name        subject
    0      mason          first
    1      mason          math
    2      mason          first 
    3      mason          chem
    4      mason          math
    5       paul          first
    6       paul          chem
    7       paul          first
    8       paul          math

【问题讨论】:

    标签: python python-3.x pandas dataframe numpy


    【解决方案1】:

    这是一种使用条件来创建分组器的累积总和列和df.groupby.apply 来检查每个组的条件的方法:

    c1 = df['subject'].eq("first").cumsum()
    out = (df[df.groupby(["name",c1])['subject']
      .apply(lambda x: (~x.duplicated()&x.eq("math")) | x.ne('math'))])
    

    print(out)
    
         name subject
    0   mason   first
    1   mason    math
    3   mason   first
    4   mason    chem
    5   mason    math
    7    paul   first
    8    paul    chem
    9    paul   first
    10   paul    math
    

    【讨论】:

    • 这不适用于此数据框 - 当前删除一次重复的数学例如:data = {'name': ['mason', 'mason', 'mason', 'mason','mason', 'mason', 'mason', 'mason', 'paul', 'paul', 'paul', 'paul', 'paul'], 'subject': ['first', 'math', 'math','math', 'first', 'chem', 'math', 'math', 'first', 'chem', 'first', 'math', 'math']} df = pd.DataFrame(data)
    • @user15590480 更新了我的答案,请立即尝试。我在读取重复值而不是读取非重复值时犯了一个错误(重复的第一个值)感谢您的帮助:)
    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2020-07-11
    • 2023-02-14
    • 2014-03-14
    相关资源
    最近更新 更多