【问题标题】:Create bool mask from filter results in Pandas [duplicate]从 Pandas 中的过滤器结果创建布尔掩码 [重复]
【发布时间】:2016-12-12 15:54:10
【问题描述】:

我知道如何在查询单个列时创建掩码来过滤数据框:

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]

此过滤器如我所料,但如何根据我的其他示例从中创建布尔掩码?我已经为此提供了测试数据,但我经常想在其他类型的数据上创建一个掩码,所以我正在寻找任何指针。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您的布尔掩码是布尔值(显然),因此您可以在它们上使用boolean operations。布尔运算符包括(但不限于)&|,它们可以根据“与”操作或“或”操作组合您的掩码。在您的特定情况下,您需要一个“与”操作。所以你只需像这样写你的面具:

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

    这可确保您选择同时满足两个条件的行。通过将& 替换为|,可以选择满足两个条件之一的行。你可以像往常一样选择你的结果:

    data[mask]
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 2022-08-19
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多