在某些条件下从数据框中删除重复项

时间:2018-09-10 23:36:24

标签: python pandas duplicates aggregate-functions

我有以下数据框

my_id  field_1   field_2   field_3 ...  field_100
1         :
1         :      
1
1 
2
2
3
3
3

我想使用最少为my_id的非空记录,每个field_1仅保留一行。除了在整个数据帧上循环外,是否有一种优雅的方法可以解决此问题?谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以使用idxmin,因为它已经处理了NaN(将不被考虑)和min(将被选择)

df.loc[df.groupby('myid').field_1.idxmin()]