选择符合条件A或B的列

2021-09-16 23:07:05 发布

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

我试着寻找这辆巴士的答案,但找不到答案。你知道吗

我试图选择一个子集,我的数据帧,满足条件'和(B或C)'到目前为止,我无法让它工作。你知道吗

我正在尝试的代码:

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

这行给了我以下的错误信息

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().enter code here

有没有办法让这一切顺利进行?我知道我可以子集('a'=a和'b'=b)和('a'=a和'b'.isnull())并合并这两个子集。但是在一条线上做会更好。你知道吗

谢谢

2条回答
网友
1楼 ·

你需要用|表示or,就像你用&表示and。你知道吗

这也意味着您需要确保插入这两个条件,但您已经这样做了。你知道吗

网友
2楼 ·

考虑数据帧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
^{}

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

相关问题