加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读