我知道如何在查询单列时创建掩码来过滤数据帧:
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]
这个过滤器正如我所期望的那样,但是如何根据我的其他示例从中创建布尔掩码?我已经为此提供了测试数据,但我经常想在其他类型的数据上创建掩码,因此我正在寻找任何指针。
你的布尔掩码是布尔值(显然),所以你可以使用布尔运算 https://en.wikipedia.org/wiki/Boolean_algebra在他们。布尔运算符包括(但不限于)&
, |
它可以根据“与”运算或“或”运算组合您的掩码。在您的具体情况下,您需要“与”运算。所以你只需像这样写你的面具:
mask = (data['value2'] == 'A') & (data['value'] > 4)
这可确保您选择同时满足两个条件的行。通过更换&
with |
,可以选择满足两个条件之一的那些行。您可以照常选择结果:
data[mask]
虽然这个问题是由 ayhan 在他的评论中指出的问题的答案回答的,但我认为 OP 缺乏布尔运算的想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)