在特定条件下从数据框中删除重复项

我有以下数据框


my_id  field_1   field_2   field_3 ...  field_100

1         :

1         :      

1

2

2

3

3

3

我想为每个只保留一行my_id,使用非空,最小值的记录field_1。除了遍历整个数据框之外,有没有一种优雅的方法来解决这个问题?谢谢!


白衣染霜花
浏览 124回答 2
2回答

阿晨1998

IUC:df.sort_values(['myid','field_1']).drop_duplicates(['my_id'])这是有效的,因为sort_values默认情况下将空值放在最后,并drop_duplicates保留第一个。因此,如果按 排序field_1,则第一个值将是最低的非空值。例子:>>> df   myid  field_1   field_20     1      NaN  0.8324451     1      3.0  0.7429062     1      2.0  0.3921633     2      2.0  0.0894124     2      NaN  0.8157545     2      1.0  0.615426>>> df.sort_values(['myid','field_1']).drop_duplicates(['myid'])   myid  field_1   field_22     1      2.0  0.3921635     2      1.0  0.615426另一种方法是排序,然后使用groupby并选择first(但我认为这效率较低):>>> df.sort_values('field_1').groupby('myid', as_index=False).first()   myid  field_1   field_20     1      2.0  0.3921631     2      1.0  0.615426

牛魔王的故事

您可以使用,idxmin因为它已经处理了NaN(不会被考虑)和min(将被选中)df.loc[df.groupby('myid').field_1.idxmin()]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python