代码之家  ›  专栏  ›  技术社区  ›  William

熊猫如何根据不同的列和不同的条件删除行

  •  0
  • William  · 技术社区  · 4 年前

    我有一个df,你可以通过复制以下代码获得:

    from io import StringIO
    df = """
          RateCompany   gs  RB  ValIssueDate
     115    T           G   54  19580101
     116    T           G   54  19870101
     336    T           S   54  19580101
     337    T           S   54  19870101
     338    T           j   53  19970101
    """
    df = pd.read_csv(StringIO(df.strip()), sep='\s+')
    

    输出应为:

     RateCompany    gs  RB  ValIssueDate
             115    T           G   54  19580101
             336    T           S   54  19580101
             338    T           j   53  19970101
    

    有朋友能帮忙吗?

    3 回复  |  直到 4 年前
        1
  •  3
  •   not_speshal    4 年前

    按要比较的列排序,然后在关键列上删除重复项:

    df.sort_values('ValIssueDate').drop_duplicates(['RateCompany', 'gs', 'RB'])
    

    输出:

        RateCompany gs  RB  ValIssueDate
    115           T  G  54      19580101
    336           T  S  54      19580101
    338           T  j  53      19970101
    
        2
  •  2
  •   rhug123    4 年前

    这里有另一种使用 idxmin()

    df.loc[df.groupby(['RateCompany', 'gs', 'RB'])['ValIssueDate'].idxmin()]
    
    
         RateCompany   gs   RB  ValIssueDate
    115            T    G   54  19580101
    336            T    S   54  19580101
    338            T    j   53  19970101
    
        3
  •  1
  •   not_speshal    4 年前

    你可以用 groupby 具有 min

    >>> df.groupby(["RateCompany", "gs", "RB"], as_index=False)["ValIssueDate"].min()
    
      RateCompany gs  RB  ValIssueDate
    0           T  G  54      19580101
    1           T  S  54      19580101
    2           T  j  53      19970101