Pandas/Python基于特定行值删除重复项

Pandas/Python基于特定行值删除重复项,python,pandas,dataframe,duplicates,loc,Python,Pandas,Dataframe,Duplicates,Loc,我正在尝试根据多个条件删除重复项: 在列df['A'] 检查列df['status']并将OK与Open和Open与Close区分优先级 如果我们有一个状态相同的副本,则根据df['Col\u 1] df=pd.DataFrame({'A':['11','11','12',np.nan','13','13','14','14','15'], '状态':['OK','Close','Close','OK','OK','Open','Open','Open','Open',np.nan], “

我正在尝试根据多个条件删除重复项:

  • 在列
    df['A']

  • 检查列
    df['status']
    并将OK与Open和Open与Close区分优先级

  • 如果我们有一个状态相同的副本,则根据
    df['Col\u 1]

  • df=pd.DataFrame({'A':['11','11','12',np.nan','13','13','14','14','15'], '状态':['OK','Close','Close','OK','OK','Open','Open','Open','Open',np.nan], “Col_1”:[2000、2001、2000、2000、2000、2002、2000、2004、2000]} df

    预期产出:

    我尝试过不同的解决方案,如下面的链接(地图或loc),但我无法找到正确的方法:


    为优先排序
    状态创建有序分类,然后按所有列排序,按第一列
    A
    和最后一个排序索引删除重复项:

    c = ['OK','Open','Close']
    df['Status'] = pd.Categorical(df['Status'], ordered=True, categories=c)
    
    df = df.sort_values(['A','Status','Col_1']).drop_duplicates('A').sort_index()
    print (df)
         A Status  Col_1
    0   11     OK   2000
    2   12  Close   2000
    3  NaN     OK   2000
    4   13     OK   2000
    6   14   Open   2000
    8   15    NaN   2000
    
    如果需要,请编辑避免删除“添加帮助程序”列中的
    NaN
    s:

    df['test'] = df['A'].isna().cumsum()
    
    c = ['OK','Open','Close']
    df['Status'] = pd.Categorical(df['Status'], ordered=True, categories=c)
    
    df = (df.sort_values(['A','Status','Col_1', 'test'])
            .drop_duplicates(['A', 'test'])
            .sort_index())
    

    非常感谢,如果我们有多个NaN,是否有办法将所有NaN保留在a列中?我刚刚意识到,代码在日期中的一部分工作正常,而日期不是由最新的NaN选择的one@Caiotru-你能解释更多吗?@Caiotru-一个想法-日期是字符串吗?还是约会时间?或者数字?例如,如果我有两个代码相同的OK,我希望选择最新的日期,如果它们是有序的,我希望保留='last'