IIUC:
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