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

在Pandas[复制]中从筛选结果创建bool掩码

琴俊良
2023-03-14

我知道如何创建一个掩码来过滤数据帧时,查询一个单一的列:

import pandas as pd
import datetime
index = pd.date_range('2013-1-1',periods=100,freq='30Min')
data = pd.DataFrame(data=list(range(100)), columns=['value'], index=index)
data['value2'] = 'A'
data['value2'].loc[0:10] = 'B'

data

    value   value2
2013-01-01 00:00:00 0   B
2013-01-01 00:30:00 1   B
2013-01-01 01:00:00 2   B
2013-01-01 01:30:00 3   B
2013-01-01 02:00:00 4   B
2013-01-01 02:30:00 5   B
2013-01-01 03:00:00 6   B

我在这里使用一个简单的面具:

mask = data['value'] > 4
data[mask]
    value   value2
2013-01-01 02:30:00 5   B
2013-01-01 03:00:00 6   B
2013-01-01 03:30:00 7   B
2013-01-01 04:00:00 8   B
2013-01-01 04:30:00 9   B
2013-01-01 05:00:00 10  A

我的问题是如何创建具有多列的掩码?因此,如果我这样做:

data[data['value2'] == 'A' ][data['value'] > 4]

这就像我期望的那样过滤,但是如何根据我的另一个例子从中创建布尔掩码呢?我已经为此提供了测试数据,但我经常想在其他类型的数据上创建一个掩码,所以我正在寻找任何指针。

共有1个答案

孟正志
2023-03-14

您的布尔掩码是布尔的(显然),因此您可以对它们使用布尔运算。布尔运算符包括(但不限于)

mask = (data['value2'] == 'A') & (data['value'] > 4)

这样可以确保您选择同时满足这两个条件的行。通过替换

data[mask]

虽然这个问题由ayhan在评论中指出的问题的答案来回答,但我认为OP缺乏布尔运算的概念。

 类似资料:
  • 这一组数据在进行groupby前已经完成筛选,但进行groupby聚合后的结果显示是利用未筛选的数据进行的聚合,就像下面的结果,在groupby前已经完成点击量非0过滤,但最后仍存在含0的资源,询问chatGPT给的方案是可能用索引前的数据进行的聚合,重置索引后仍无法解决,请教大牛是否遇到过类似的问题,虽然可以在聚合后重新进行filter过滤,但这个问题搞得很焦灼 代码源文本

  • 我是elasticsearch的新手,所以我的问题是: 提前致谢:)

  • 我有一个产品集合,每个产品都会有: 价格 属性(例如:大小:xl,s,xxl;颜色:黄,红,蓝;....) 制造商 类别(一个产品可以有多个类别) 此集合在ElasticSearch中索引。现在,当我查询类别A中所有产品的列表时,我还希望获得: 所有产品的价格范围(最小-最大) 所有可能选项和值的列表(大小、颜色和相应的值xl、s、xxl、Yellog、red、blue) 制造商(耐克、阿迪达斯、

  • 我试图创建一个安全过滤器,以排除某些用户在ElasticSearch中看到某些文档。例如,如果一个文档包含“abc:123”和“abc:xyz”,那么用户的配置文件中必须同时包含这两个文档才能查看该文档。我们正在使用小胡子模板创建这个动态。我的第一次尝试是这样的: 但是,我很快意识到,这将允许拥有一个控件的用户查看具有多个控件的文档。文档必须具有用户必须匹配的控件的子集。因此,如果用户只有“abc

  • 我有一个对象,如下所示: 我想过滤并创建一个满足任何条件的新数组。例如:过滤器的名称为“AD”,并创建一个新的密钥数组,如下所示: 尝试地图 尝试过了。过滤器: 提前谢谢

  • 问题内容: 我想做这样的事情: 您可以用Java这样做吗?(我来自ac#背景) 问题答案: 您可以轻松地使用