2017-01-11 5 views
0

このバスの回答を検索しようとしましたが見つかりませんでした。パンダがAまたはBの基準を満たす列を選択しました

基準 'Aと(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行で行う方が良いでしょう。

おかげ

+0

使用を持っていたもの修正|'ない 'or':' df_subset = DF [(DFの[ '' を] == A)&((df ['b'] == B)| (df ['b']。isnull()))] 'と'、 '、'〜 '、'〜 'はそれぞれ演算子を使用する必要があります – EdChum

答えて

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 
+0

ありがとう!方法3は私がしたかったものでした。 – Hkk

+0

@Sinanju喜んで私は助けることができました。 ***メソッド2 ***は***メソッド3 ***と同じです。私の文体的な好みを反映しているだけです。 ***方法1 ***は違うが、私は遠近法を提供したい。 – piRSquared

2

はあなたがandのため&を使用と同じように、orため|を使用する必要があります。

これはまた、2つの条件をカッコで囲む必要があることを意味しますが、すでにそれを行っています。

+0

ありがとう、これは私の問題を解決した – Hkk

関連する問題