2016-01-11 10 views
6

複数の条件に基づいてdfから行を抽出しようとしていますが、すべての条件が満たされてから行が選択される必要があります。複数の条件に基づいてdfのサブセクションを取得する

マイDF

columns = ['is_net', 'is_pct', 'is_mean', 'is_wgted', 'is_sum'] 
index = ['a','b','c','d'] 
data = [['True','True','False','False', 'False'], 
     ['True','True','True','False', 'False'], 
     ['True','True','False','False', 'True'], 
     ['True','True','False','True', 'False']] 

df = pd.DataFrame(columns=columns, index=index, data=data) 
df 

    is_net is_pct is_mean is_wgted is_sum 
a True True False False False 
b True True True False False 
c True True False False True 
d True True False True False 

この形式でなければなりません私の条件:

conditions = {'is_net': 'True', 
       'is_pct': 'True', 
       'is_mean': 'False', 
       'is_wgted': 'True', 
       'is_sum': 'False'} 

予想される出力:

is_net is_pct is_mean is_wgted is_sum 
d True True False True False 
+0

条件を組み合わせる方法を質問していますか? 'df [df.is_net&df.is_pct&...]'?あるいは、任意の数のブール型列がすべて真である行を見つける方法を尋ねていますか? –

+0

任意の数のブール値列が '条件'変数と一致します –

+1

例外:ブール値はネイティブにサポートされているタイプなので、*文字列* TrueおよびFalseを使用すると 'True!= True'のため混乱することになります。 – DSM

答えて

6

私はトリックシリーズにconditionsを作ることだと思います:

>>> pd.Series(conditions) 
is_mean  False 
is_net  True 
is_pct  True 
is_sum  False 
is_wgted  True 
dtype: object 
>>> (df == pd.Series(conditions)) 
    is_mean is_net is_pct is_sum is_wgted 
a True True True True False 
b False True True True False 
c True True True False False 
d True True True True  True 
>>> (df == pd.Series(conditions)).all(axis=1) 
a False 
b False 
c False 
d  True 
dtype: bool 
>>> df[(df == pd.Series(conditions)).all(axis=1)] 
    is_net is_pct is_mean is_wgted is_sum 
d True True False  True False 
+0

それはいい考えです。しかし、すべての条件が満たされない場合はどうなりますか? –

+0

あなたが何を求めているのか分かりません。 'a'、' b'、 'c'のように条件がすべて満たされていない場合、' all'メソッドはそのインデックスに対してFalseを返します。 – DSM

+0

私を無視して、私はnwebだった。再度、感謝します! –

関連する問題