2016-12-04 12 views
1

私はPythonの新機能です。私は以下のフィルタリングをしたいと思いますが、最初の条件だけが適用され、他の条件は無視されます。どこが間違っているのか教えていただけますか?ここで が私のデータである:あなたのケースのために最初の条件のみが適用されます

**   Exponentiation (raise to the power) 
~ + -  Ccomplement, unary plus and minus (method names for the last two are [email protected] and [email protected]) 
*/% // Multiply, divide, modulo and floor division 
+ -   Addition and subtraction 
>> <<  Right and left bitwise shift 
&   Bitwise 'AND'td> 
^ |   Bitwise exclusive `OR' and regular `OR' 
<= < > >= Comparison operators 
<> == != Equality operators 
= %= /= //= -= += *= **= Assignment operators 
is is not Identity operators 
in not in Membership operators 
not or and Logical operators 

enter image description here

import pandas as pd 
census_df = pd.read_csv('census.csv') 
census_df.head() 
census_df 

val1=census_df['POPESTIMATE2015'] 
val2=census_df['POPESTIMATE2014'] 

def answer_one(): 

    return census_df[val1>val2 & (census_df['REGION']==1 | (census_df['REGION']==2) & (census_df['CTYNAME'].str.len=='Washington')) ] 

answer_one() 

答えて

1

私はあなたがこの(Python operators precedence)知っておく必要があると思う

census_df[(val1 > val2) & ((census_df['REGION']==1) | 
          (census_df['REGION']==2)) & 
          (census_df['CTYNAME']=='Washington')] 

を、あなたが探しているものはおそらくですために?周りのすべての条件を括弧を入れた後

+1

返信いただきありがとうございますが、なぜ最初の条件のみが適用され、もう1つは自分のコードに適用できないのですか。私は正しい演算子を使用したと思います。 –

+0

再現性を高めるためにデータの例を挙げることはできますか?最初の条件は括弧で囲む必要があることに注意してください。 – Psidom

+1

質問に自分のデータを追加しました。たとえばここではcensus_df ['CTYNAME']。str.len == 'Washington'、適用されません。 –

1

、あなたのコード:

return census_df[(val1>val2) & ((census_df['REGION']==1) | (census_df['REGION']==2) & (census_df['CTYNAME'].str.len=='Washington')) ] 

のように評価します...

(val1と> val2の)
ビット単位と

(census_df ['REGION'] == 2)ビットと(census_df [ 'CTYNAME']。str.len == 'ワシントン')
ビット単位または
(census_df [ 'REGION'] == 1)使用している

注意(&)、ビット単位または(|)。これらは、booleanとbooleanまたはbooleanとは異なる動作をします。

関連する問題