2016-12-28 16 views
3

例:別の列の同じ行をPythonと比較するには?

私はカラムAとBを持っています。カラムAが 'Cash'になるたびにカラムBがヌルであることを確認する必要があります。私はそれがすべての行を出力するwan'tしない、私はちょうど列Aが '現金'であるたびに列BがNullである(True/False)を知りたい。

私の現在の(動作しない)コード:

mylist = [] 

while [df['A'] == 'Cash'] and [df['B'] is None]: 

    mylist.append('Pass') 
else: 

    mylist.append('Fail') 

if 'Fail' in mylist: 

    print 'Column A Pass' 

else: 

    print 'Column A Pass' 

答えて

1

列Bには列Aは '現金'あるたびにNULLである場合には?

aCash = df.A == "Cash" 
bNull = df.B.isnull() 

aCash.sum() == (aCash & bNull).sum() 
  • aCash & bNullは、両方のAが「現金」および「B」がNULLである場合、それはaCash自体としてTruesの同じ数を有する場合、それはACashあるすべての行手段Truesを与えますBNULLです。
1

条件

d1.A.eq('Cash').eq(d1.B.isnull()).all() 

デモ

d1 = pd.DataFrame(dict(
     A=['a', 'b', 'Cash', 'c', 'Cash', 'd'], 
     B=[1, 1, None, 1, None, 1], 
     C=[1, None, 1, 1, 1, 1] 
    )) 
print(d1) 

     A B C 
0  a 1.0 1.0 
1  b 1.0 NaN 
2 Cash NaN 1.0 
3  c 1.0 1.0 
4 Cash NaN 1.0 
5  d 1.0 1.0 

d1.A.eq('Cash').eq(d1.B.isnull()).all() 

True 

のテスト平等
d1.A.eq('Cash').eq(d1.C.isnull()).all() 

False 
+0

上記の例では、BにいくつかのNaNが他の場所にある場合、これは当てはまりませんが、それでもロジックを満たしていますか? – Psidom

+1

正しい。私の解釈は、これがOPが望んだものであるということでした。そうでない場合は、 'A'が' '現金 ''でない場合、あなたのアプローチは' 'B''が' 'None''を取るかもしれません。 – piRSquared

+0

ありがとうございます! –

関連する問題