代码之家  ›  专栏  ›  技术社区  ›  Umar.H

使用双重条件删除重复项

  •  1
  • Umar.H  · 技术社区  · 6 年前

        import pandas as pd
        df = pd.DataFrame({'ID': [1,1,1,1,2,2,2,2], 
        'Course': 
        ['English','English','English','History','Science', 'Science', 'Science','Math'],
        'Status':
        ['Attended', 'Requested', 'Partially Attended', 'No show',
        'Requested','Attended','Partially Attended','No show']})
        df.set_index(['ID'])
        print(df)
    
    Course  Status
    ID      
    1   English Attended
    1   English Requested
    1   English Partially Attended
    1   History No show
    2   Science Requested
    2   Science Attended
    2   Science Partially Attended
    2   Math    No show
    

    1. ID多次出现。
    2. 如果找到匹配的,我想 在课程完成且有请求的实例中删除,删除包含请求的行。没有演出和部分出席都可以。

    我目前正在学习和参加DataCamps、Python和pandas课程,因此我熟悉groupby、aggregate和sort函数,在这些函数中,我可以删除时间序列数据的后期或早期副本。我不知道如何将条件或逻辑应用于drop函数。我已经在这个论坛上搜索过类似的功能,但是我没有把任何东西应用到我自己的DF上。

    Course  Status
    ID      
    1   English Attended
    1   English Partially Attended
    1   History No show
    2   Science Attended
    2   Science Partially Attended
    2   Math    No show
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   piRSquared    6 年前

    duplicated Requested

    df[~df.duplicated(['ID', 'Course'], keep=False) | df.Status.ne('Requested')]
    
        Course  ID              Status
    0  English   1            Attended
    2  English   1  Partially Attended
    3  History   1             No show
    5  Science   2            Attended
    6  Science   2  Partially Attended
    7     Math   2             No show
    

    pandas.DataFrame.duplicated

    标识内容是否重复。我传递了一个列名列表,用于确定重复性。通过使用 keep=False

    df.duplicated(['ID', 'Course'], keep=False)
    
    0     True
    1     True
    2     True
    3    False
    4     True
    5     True
    6     True
    7    False
    dtype: bool
    

    请求

    df.Status.ne('Requested')
    
    0     True
    1    False
    2     True
    3     True
    4    False
    5     True
    6     True
    7     True
    Name: Status, dtype: bool
    

    所以我们想要不是重复的行,如果它们是至少没有重复的行 Status