我有一个数据框,其中包含两列具有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)
非常感谢!
答案 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())