2 回答
TA贡献2037条经验 获得超6个赞
IUC:
df.sort_values(['myid','field_1']).drop_duplicates(['my_id'])
这是有效的,因为sort_values默认情况下将空值放在最后,并drop_duplicates保留第一个。因此,如果按 排序field_1,则第一个值将是最低的非空值。
例子:
>>> df
myid field_1 field_2
0 1 NaN 0.832445
1 1 3.0 0.742906
2 1 2.0 0.392163
3 2 2.0 0.089412
4 2 NaN 0.815754
5 2 1.0 0.615426
>>> df.sort_values(['myid','field_1']).drop_duplicates(['myid'])
myid field_1 field_2
2 1 2.0 0.392163
5 2 1.0 0.615426
另一种方法是排序,然后使用groupby并选择first(但我认为这效率较低):
>>> df.sort_values('field_1').groupby('myid', as_index=False).first()
myid field_1 field_2
0 1 2.0 0.392163
1 2 1.0 0.615426
TA贡献1830条经验 获得超3个赞
您可以使用,idxmin
因为它已经处理了NaN
(不会被考虑)和min
(将被选中)
df.loc[df.groupby('myid').field_1.idxmin()]
添加回答
举报