2016-12-28 2 views
3

Пример:Как сравнить ту же строку в разных столбцах с python?

У меня есть столбцы A и B, и мне нужно сделать проверку качества, чтобы убедиться, что столбец B является Null каждый раз, когда столбец A является «наличными». Я не хочу выводить каждую строку, я просто хочу знать (True/False), если столбец B является Null для каждого столбца A «Cash».

Мой текущий (не работает) Код:

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 является Null для любого времени Колонка А 'Cash'?

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

aCash.sum() == (aCash & bNull).sum() 
  • aCash & bNull дает трас, если и А является «Cash» и «B» является NULL, если он имеет такое же количество трас, как сама aCash это означает для всех строк, где A является Cash, B - NULL.
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 имеет некоторые NaNs в другом месте, это не будет правдой, но оно все еще удовлетворяет логике, не так ли? – Psidom

+1

Исправить. Моя интерпретация заключалась в том, что это то, чего хотел OP. Если нет, тогда ваш подход позаботится о 'B' может иметь' None', когда 'A' ​​не' 'Cash'' – piRSquared

+0

Спасибо вам! –

Смежные вопросы