猿问

Pandas 按多个条件删除重复行

从我的 df 开始,我想按如下方式删除行:每次ID检查是否至少一次COD1=COD2且 ifGRADE包含字符串'A'or 'C'。如果满足这两个条件,则删除行。


我的想法是这样提出我的条件:


indexNames = df[ (df[df.COD1 == df.COD2]) & (df[df['Grade'].isin(['A','C'])]) ].index

然后用


df.drop(indexNames , inplace=True)

然而对于第一行我得到了TypeError: unsupported operand type(s) for &: 'int' and 'float'。


我真的很感激任何关于如何实现我的目标的想法。我的 DF:


# -- create a dataframe 

list_columns = ['ID', 'COD1', 'COD2','Grade','Data']

list_data = [

    [3215575, 'A21', 'A21','A','2020-09-16 13:25:00'],

    [3215575, 'A11', 'A21','D','2020-09-16 13:55:00'],

    [3215575, 'A21', 'A21','E','2020-09-16 13:12:00'],

    [4058770, 'D10', '213','E','2020-09-16 12:25:00'],

    [4058770, '313', '313','E','2020-09-16 10:25:00'],

    [4058770, '313', '125','B','2020-09-16 13:19:00'],

    [4058771, 'C55', 'C55','C','2020-09-16 14:25:00'],

    [3215577, 'A21', 'A21','B','2020-09-16 13:25:00'],

    [3215577, 'A01', 'A21','D','2020-09-16 13:55:00']

    ]

df = pd.DataFrame(columns=list_columns, data=list_data)

预期输出:


    list_columns = ['ID', 'COD1', 'COD2','Grade','Data']

    list_data = [

        [4058770, 'D10', '213','E','2020-09-16 12:25:00'],

        [4058770, '313', '313','E','2020-09-16 10:25:00'],

        [3215577, 'A21', 'A21','B','2020-09-16 13:25:00'],

        [3215577, 'A01', 'A21','D','2020-09-16 13:55:00']

        ]


df2 = pd.DataFrame(columns=list_columns, data=list_data)


白板的微信
浏览 137回答 1
1回答

慕桂英4014372

IIUC,,你需要一个条件,用 groupby 并用 any 进行变换,然后反转:cond = (df.COD1 == df.COD2) & df['Grade'].isin(['A','C'])df2 = df[~cond.groupby(df['ID']).transform('any')].reset_index(drop=True)        ID COD1 COD2 Grade                 Data0  4058770  D10  213     E  2020-09-16 12:25:001  4058770  313  313     E  2020-09-16 10:25:002  4058770  313  125     B  2020-09-16 13:19:003  3215577  A21  A21     B  2020-09-16 13:25:004  3215577  A01  A21     D  2020-09-16 13:55:00
随时随地看视频慕课网APP

相关分类

Python
我要回答