Groupby列使多个行保持最小值

时间:2019-01-17 12:39:37

标签: python pandas pandas-groupby

我有一个数据框,其中包含两列具有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 个答案:

答案 0 :(得分:2)

您很亲密,只需要将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

答案 1 :(得分:0)

最简单的方法:

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