按列分组保留多个最小值行

4

我有一个数据框,包含两列ID和一列数值。我希望按照第一列ID分组,并保留与第二列中最小值相对应的所有行,以便在需要的情况下保留多个行。

这是我的Pandas数据框:

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

What I want to have is:

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个回答

5

您已经接近成功,只需要将id2列与transform Series进行比较,并通过布尔索引进行筛选:

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

0

最简单的方法:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接