python - 在所有不符合条件的行上过滤 Pandas 数据框

标签 python pandas

<分区>

这看起来很简单,但我似乎无法弄清楚。我知道如何将 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)

我认为 not 应该只是否定后面括号内的 bool 值,但这似乎不是它的工作原理。

我希望它返回 5,6 处的奶牛而不是 5,7 处的狼(因为那是当前的棋子)。只是为了仔细检查我的逻辑,我做了

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

正如我所料,这只返回了狼。那么,为什么我不能在它前面放一个 not 并获得其他所有内容呢?或者,更重要的是,我该怎么做才能获得其他一切。

最佳答案

由于 numpy(因此 pandas)使用按位运算符,您应该将 not 替换为 ~。这也是您使用 & 而不是 and 的原因。

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

关于python - 在所有不符合条件的行上过滤 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39078781/

相关文章:

python - 如何在 Panda 的 from_dict (Python) 中使用 dtype 参数

python - 如何根据上下粉色范围查找roi_corners,以便可以在python中使用opencv对其进行模糊处理

python - Flask-ReSTLess Marshmallow 序列化器

python - Pandas :如果符合条件,则从另一列更新列值

python - 如何根据 PySpark 中的条件修改行子集

performance - Python : break up dataframe (one row per entry in column, 而不是列中的多个条目)

Python 错误处理 : finally vs. 新行缩进

python - 如何解析 orderedDict?

python - Unicode解码错误: ('utf-8' codec) while reading a dta file in Pandas

python - 在 Pandas 中广播列表