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

GroupBy列保留具有最小值的多行

  •  2
  • cappuccino  · 技术社区  · 7 年前

    我有一个数据框架,由两列ID和一列数值组成。我希望按第一个ID列分组,并保留与第二列中最小值对应的所有行,以便在需要时保留多行。

    这是我的熊猫数据框

    id1 id2 num1
    1   1   9 
    1   1   4
    1   2   4
    1   2   3
    1   3   7
    2   6   9
    2   6   1
    2   6   5
    2   9   3
    2   9   7
    3   2   8
    3   4   2
    3   4   7
    3   4   9
    3   4   10
    

    我想要的是:

    id1 id2 num1
    1   1   9 
    1   1   4
    2   6   9
    2   6   1
    2   6   5
    3   2   8
    

    我尝试保留最小值,查找idxmin()或删除重复项,但最终每个id1和id2只有一行。

    firstS.groupby('id1')['id2'].transform(min)
    

    非常感谢!

    2 回复  |  直到 7 年前
        1
  •  2
  •   jezrael    7 年前

    你很亲近,只需要比较 id2 柱带 transform Series 过滤 boolean indexing :

    df = firstS[firstS['id2'] == firstS.groupby('id1')['id2'].transform(min)]
    print (df)
        id1  id2  num1
    0     1    1     9
    1     1    1     4
    5     2    6     9
    6     2    6     1
    7     2    6     5
    10    3    2     8
    
        2
  •  0
  •   Sunil Goyal    7 年前

    最简单的方法:

    df = df.merge(df.groupby("id1").id2.min().reset_index())