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

通过保持n个最大值减少数据帧

  •  0
  • ohe  · 技术社区  · 6 年前

    假设我有以下数据帧:

    id1    dt                   id2   count
    0      2010-02-06 07:21:45  id0   78
    0      2010-02-06 07:21:45  id1   79
    0      2010-02-06 07:21:45  id2   80
    0      2010-02-06 07:21:45  id3   69
    0      2010-02-06 07:58:25  id4   58
    1      2010-02-06 07:58:25  id0   67
    

    因此,对于n=3:

    id1    dt                   id2   count
    0      2010-02-06 07:21:45  id0   78
    0      2010-02-06 07:21:45  id1   79
    0      2010-02-06 07:21:45  id2   80
    0      2010-02-06 07:58:25  id4   58
    1      2010-02-06 07:58:25  id0   67
    

    它还应该检测多个“id2”。因此,如果输入是:

    id1    dt                   id2   count
    0      2010-02-06 07:21:45  id0   78
    0      2010-02-06 07:21:45  id1   79
    0      2010-02-06 07:21:45  id2   80
    0      2010-02-06 07:21:45  id2   79
    0      2010-02-06 07:21:45  id3   69
    0      2010-02-06 07:58:25  id4   58
    1      2010-02-06 07:58:25  id0   67
    

    它必须返回n=3

    2010年2月6日07:21:45 id0 78
    电话:2010-02-06 07:21:45 id1 79
    2010年2月6日07:21:45 id2 80
    2010年2月6日07:58:25 id4 58
    2010年2月6日07:58:25 id0 67
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   anon01    6 年前

    这应该起作用:

    df = df.sort_values("count", ascending=False).groupby(["dt", "id2"], as_index=False).first()
    df = df.groupby("dt").apply(lambda x: x.iloc[0:3]).reset_index(drop=True)