当前位置: 首页 > 知识库问答 >
问题:

筛选不满足条件的所有行上的数据帧[重复]

张承颜
2023-03-14

这似乎很简单,但我似乎无法理解。我知道如何将pandas数据帧过滤到满足条件的所有行,但当我想要相反的结果时,我总是会遇到奇怪的错误。

这是一个例子。(上下文:一个简单的棋盘游戏,棋子在网格上,我们试图给它一个坐标,并返回所有相邻的棋子,但不是实际坐标上的实际棋子)

import pandas as pd
import numpy as np

df = pd.DataFrame([[5,7, 'wolf'],
              [5,6,'cow'],
              [8, 2, 'rabbit'],
              [5, 3, 'rabbit'],
              [3, 2, 'cow'],
              [7, 5, 'rabbit']],
              columns = ['lat', 'long', 'type'])

coords = [5,7] #the coordinate I'm testing, a wolf

view = df[((coords[0] - 1) <= df['lat']) & (df['lat'] <= (coords[0] + 1)) \
    & ((coords[1] - 1) <= df['long']) & (df['long'] <= (coords[1] + 1))]

view = view[not ((coords[0] == view['lat']) & (coords[1] == view['long'])) ] 

print(view)

我认为而不是应该只是否定后面括号中的布尔值,但这似乎不是它的工作方式。

我想让它在5,6时归还母牛,而不是在5,7时归还狼(因为这是当前的一块)。只是为了再次检查我的逻辑,我做了

me = view[(coords[0] == view['lat']) & (coords[1] == view['long'])] 
print(me)

正如我所料,这只狼回来了。那么,为什么我不能在前面加上一个而不是,然后得到其他所有东西呢?或者,更重要的是,我该怎么做才能得到其他一切。


共有1个答案

施利
2023-03-14

由于numpy(因此pandas)使用位运算符,因此应使用~替换not。这也是您使用

import pandas as pd

df = pd.DataFrame({'a': [1, 2]})

print(df[~(df['a'] == 1)])
>>    a
   1  2

以你为例:

import pandas as pd
import numpy as np

df = pd.DataFrame([[5,7, 'wolf'],
              [5,6,'cow'],
              [8, 2, 'rabbit'],
              [5, 3, 'rabbit'],
              [3, 2, 'cow'],
              [7, 5, 'rabbit']],
              columns = ['lat', 'long', 'type'])

coords = [5,7] #the coordinate I'm testing, a wolf

view = df[((coords[0] - 1) <= df['lat']) & (df['lat'] <= (coords[0] + 1)) \
    & ((coords[1] - 1) <= df['long']) & (df['long'] <= (coords[1] + 1))]

view = view[~ ((coords[0] == view['lat']) & (coords[1] == view['long'])) ] 

print(view)
>>    lat  long type
   1    5     6  cow

 类似资料:
  • 问题内容: 这是我无法弄清楚的非常基本的查询。 假设我有一个两列的表格,如下所示: 我想获取所有具有1、2和3的不同用户ID 。使用上面的示例,我要返回的唯一结果是1。我该怎么做? 问题答案: 任何人阅读本:我的答案是简单明了的,并得到了“接受”的地位,但请不要去阅读答案通过@cletus给出。它具有更好的性能。 只是大声思考一下,@ cletus所描述的编写自联接的另一种方法是: 这对您来说可能

  • 本文向大家介绍浅谈pandas筛选出表中满足另一个表所有条件的数据方法,包括了浅谈pandas筛选出表中满足另一个表所有条件的数据方法的使用技巧和注意事项,需要的朋友参考一下 今天记录一下pandas筛选出一个表中满足另一个表中所有条件的数据。例如: list1 结构:名字,ID,颜色,数量,类型。 list1 = [['a',1,255,100,'03'],['a',2,481,50,'06']

  • 问题内容: 使用以下模型: 如果我要查找包含至少一篇文章的订单操作,则可以按预期工作: 但是,如果要查找订单中所有商品的订单操作,正确的方法是什么? 引发错误(我理解为什么会这样)。 问题答案: 一个简单的解决方案: 这只是一个查询,但每篇文章都有一个内部联接。对于多篇文章,Willem更巧妙的解决方案应该会表现更好。

  • 我想过滤熊猫DataFrame,它从DataFrame中过滤掉除值中声明的行之外的所有其他列。我如何才能做到这一点并获得预期输出。 预期输出:

  • 问题内容: 我有一个非常简单的问题:是否可以根据满足的条件对检索到的行进行排序?例如,我有一个人桌,我想检索所有名称以“ I”开头,以“ ster”结尾或包含“ lo”的人,并根据满足这些条件的顺序对其进行排序。首先是与第一个条件匹配的行,然后是与第二个条件匹配的行,依此类推。( 不重复: 如果某行满足第一个条件,则在第二个条件下不应再次显示该行) 编辑: 我使用Visual C#,并且使用MS

  • 我想使用条件筛选数据集。我尝试使用.isin()函数,但在筛选np.array浮点列表时得到了一个空数据帧。这是我的密码 我在绝对差异btw公式列中搜索的值实际上是存在的,因为当我运行df[15:25]时,我得到了这个 那么,我如何使用.isin()函数或任何条件语句来实现它呢。目标是用0.1到0.9范围内的df['Absolute Diff btw formulas']值打印数据帧。谢谢