Pandas选择符合标准A或B的列

时间:2017-01-11 20:53:38

标签: python pandas

我试图搜索这辆公共汽车的答案找不到任何答案。

我正在尝试选择满足条件“A和(B或C)”的数据框的子集,到目前为止我无法使其工作。

我正在尝试的代码:

mWebView.loadUrl("http://www.google.com");

此行给出了以下错误消息

df_subset = df[(df['a'] == A) & ((df['b']== B) or (df['b'].isnull()))]

无论如何要使这个工作?我知道我可以子集('a'= A和'b'= B)和('a'= A和'b'.isnull())并合并2个子集。但是在一条线上做这样会更好。

谢谢

2 个答案:

答案 0 :(得分:2)

您需要|使用or,就像&使用and一样。

这也意味着您需要确保将这两个条件括起来,但您已经这样做了。

答案 1 :(得分:0)

考虑数据框df

np.random.seed([3,1415])
df = pd.DataFrame(
    np.random.choice(list('ABC'), size=(20, 3)),
    columns=list('abc'))
df = df.mask(np.random.choice((True, False), size=(20, 3), p=(.1, .9)))

df

      a    b    c
0     A    C    C
1     C    C    B
2     B    C    A
3     C    A    C
4     A    A    C
5     A    C  NaN
6   NaN    B    A
7   NaN    B    C
8     A    A    A
9     A    B    C
10    B    A    B
11    B  NaN    A
12    A    C    A
13    C    C    C
14  NaN    C    C
15    B    C    A
16    C    B    A
17    A  NaN    B
18    C  NaN    A
19    A    C    B

方法1
pd.DataFrame.query

df.query('a == "A" & (b == "B" | b != b)')

方法2
使用系列布尔运算符

df[df.a.eq('A') & (df.b.eq('B') | df.b.isnull())]

方法3
纠正你的想法

df[(df['a'] == 'A') & ((df['b'] == 'B') | df['b'].isnull())]
#                                       ^          
#                                       |

    a    b  c
9   A    B  C
17  A  NaN  B