为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣染霜花 2021-06-04 15:08:58
我有以下数据框my_id  field_1   field_2   field_3 ...  field_1001         :1         :      11 22333我想为每个只保留一行my_id,使用非空,最小值的记录field_1。除了遍历整个数据框之外,有没有一种优雅的方法来解决这个问题?谢谢!
查看完整描述

2 回答

?
阿晨1998

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


查看完整回答
反对 回复 2021-06-15
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

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

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


查看完整回答
反对 回复 2021-06-15
  • 2 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信