【问题标题】:Groupby column keep multiple rows with minimum valueGroupby 列保持多行的最小值
【发布时间】:2019-01-17 12:39:37
【问题描述】:

我有一个数据框,其中包含两列带有 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)

非常感谢!

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    您很接近,只需将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】:

      最简单的方法:

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

      【讨论】:

        猜你喜欢
        • 2013-01-30
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-12
        • 1970-01-01
        相关资源
        最近更新 更多