python – 检查pandas中是否有一对值
发布时间:2020-12-20 11:53:48 所属栏目:Python 来源:网络整理
导读:基本上,我在两个不同的列中有纬度和经度(在网格上).我得到了一个新坐标集的两元素列表(可能是numpy数组),我想在添加之前检查它是否重复. 例如,我的数据: df = pd.DataFrame([[4,8,'wolf','Predator',10],[5,6,'cow','Prey',[8,2,'rabbit',3,[3,[7,5,10]],co
基本上,我在两个不同的列中有纬度和经度(在网格上).我得到了一个新坐标集的两元素列表(可能是numpy数组),我想在添加之前检查它是否重复.
例如,我的数据: df = pd.DataFrame([[4,8,'wolf','Predator',10],[5,6,'cow','Prey',[8,2,'rabbit',3,[3,[7,5,10]],columns = ['lat','long','name','kingdom','energy']) newcoords1 = [4,4] newcoords2 = [7,5] 是否可以写一个if语句来告诉我是否已经存在具有该纬度和经度的行.在伪代码中: if newcoords1 in df['lat','long']: print('yes! ' + str(newcoords1)) (在示例中,newcoords1应为false,newcoords2应为true. 旁注:( df [‘lat’]中的newcoords1 [0])& (df [‘long’]中的newcoords1 [1]不起作用,因为它独立地检查它们,但我需要知道该组合是否出现在一行中. 先感谢您! 解决方法
你可以这样做:
In [140]: df.query('@newcoords2[0] == lat and @newcoords2[1] == long') Out[140]: lat long name kingdom energy 5 7 5 rabbit Prey 10 In [146]: df.query('@newcoords2[0] == lat and @newcoords2[1] == long').empty Out[146]: False 以下行将返回多个找到的行: In [147]: df.query('@newcoords2[0] == lat and @newcoords2[1] == long').shape[0] Out[147]: 1 或使用NumPy方法: In [103]: df[(df[['lat','long']].values == newcoords2).all(axis=1)] Out[103]: lat long name kingdom energy 5 7 5 rabbit Prey 10 这将显示是否至少找到了一行: In [113]: (df[['lat','long']].values == newcoords2).all(axis=1).any() Out[113]: True In [114]: (df[['lat','long']].values == newcoords1).all(axis=1).any() Out[114]: False 说明: In [104]: df[['lat','long']].values == newcoords2 Out[104]: array([[False,False],[False,[ True,True]],dtype=bool) In [105]: (df[['lat','long']].values == newcoords2).all(axis=1) Out[105]: array([False,False,True],dtype=bool) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |