从Pandas中的过滤结果创建bool mask

2024-05-12 19:17:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道如何在查询单个列时创建筛选数据帧的掩码:

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]

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


Tags: 数据importpandasdatadatetimedateindexvalue
1条回答
网友
1楼 · 发布于 2024-05-12 19:17:12

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

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

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

data[mask]

虽然这个问题的答案是艾汉在评论中指出的问题,但我认为OP缺少布尔运算的概念。

相关问题 更多 >